Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用header&;读取文件_Php_Python_Authentication_Download_Webautomation - Fatal编程技术网

Php 使用header&;读取文件

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脚本,用于在身份验证后传递文件

<?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
}
?>