Php 使用header&;读取文件
我开发了一个PHP脚本,用于在身份验证后传递文件Php 使用header&;读取文件,php,python,authentication,download,webautomation,Php,Python,Authentication,Download,Webautomation,我开发了一个PHP脚本,用于在身份验证后传递文件 <?php #SERVER.PHP if (isset($_REQUEST['uname']) && isset($_REQUEST['passwd'])) { if ($_REQUEST['uname']=='a' && $_REQUEST['passwd']=='a') { session_start(); session_regenerate_id();
<?php #SERVER.PHP
if (isset($_REQUEST['uname']) && isset($_REQUEST['passwd'])) {
if ($_REQUEST['uname']=='a' && $_REQUEST['passwd']=='a') {
session_start();
session_regenerate_id();
header('Content-Disposition: attachment; filename=fake_name.pdf');
readfile('original_name.pdf');
}
}
?>
<form name="login" action="test.php" method="get">
Username: <input type="text" name="uname"> <br />
Password: <input type="text" name="passwd"> <br />
<input type="submit" name="submit" />
</form>
但它下载了一个包含内容的文件
<form name="login" action="test.php" method="get">
Username: <input type="text" name="uname"> <br />
Password: <input type="text" name="passwd"> <br />
<input type="submit" name="submit" />
</form>
但我所有的尝试结果都是一样的。还有别的办法吗。除了web浏览器自动化(link python::splinter,selenium)之外,是否还有其他方法可以自动下载具有给定用户名和密码的文件(fake_name.pdf)
最后,我需要使用HTTP和身份验证从服务器自动下载文件。首先,我看不到任何迹象表明出现了问题标题中建议的HTTP重定向-当然不是在您发布的PHP代码中启动的。你认为为什么会发生重定向
<?php #SERVER.PHP
if (isset($_REQUEST['uname']) && isset($_REQUEST['passwd'])) {
if ($_REQUEST['uname']=='a' && $_REQUEST['passwd']=='a') {
session_start();
session_regenerate_id();
header('Content-Disposition: attachment; filename=fake_name.pdf');
readfile('original_name.pdf');
}
}
?>
<form name="login" action="test.php" method="get">
Username: <input type="text" name="uname"> <br />
Password: <input type="text" name="passwd"> <br />
<input type="submit" name="submit" />
</form>
我认为问题出在server.php
中。original_name.pdf
确实存在吗?它是否可以被server.php
读取
请注意,即使提供了正确的凭据,HTML表单也将始终包含在响应中。这是因为PHP脚本不会在readfile()
之后终止-它会继续,并发出HTML表单
因此,我怀疑readfile('original_name.pdf')
没有生成任何输出,可能是因为pdf文件不存在,或者脚本无法访问
下面是您的server.php
的一个修改版本,它纠正了这个问题:
<?php #SERVER.PHP
if (isset($_REQUEST['uname']) && $_REQUEST['uname']=='a' &&
isset($_REQUEST['passwd']) && $_REQUEST['passwd']=='a') {
session_start();
session_regenerate_id();
header('Content-Disposition: attachment; filename=fake_name.pdf');
header('Content-type: application/pdf');
readfile('original_name.pdf');
}
else {
?>
<form name="login" action="" method="get">
Username: <input type="text" name="uname"> <br />
Password: <input type="text" name="passwd"> <br />
<input type="submit" name="submit" />
</form>
<?php
}
?>
用户名:
密码:
请注意,我为内容类型:application/pdf
添加了一个标题-这将帮助浏览器正确呈现pdf内容。另外,表单action
正在提交到test.php
,所以我已经删除了它,现在表单将提交回server.php
两个python脚本看起来都不错。一般建议在urllib上使用。你可能会遇到更少的问题
<?php #SERVER.PHP
if (isset($_REQUEST['uname']) && $_REQUEST['uname']=='a' &&
isset($_REQUEST['passwd']) && $_REQUEST['passwd']=='a') {
session_start();
session_regenerate_id();
header('Content-Disposition: attachment; filename=fake_name.pdf');
header('Content-type: application/pdf');
readfile('original_name.pdf');
}
else {
?>
<form name="login" action="" method="get">
Username: <input type="text" name="uname"> <br />
Password: <input type="text" name="passwd"> <br />
<input type="submit" name="submit" />
</form>
<?php
}
?>