无法使用cURL下载文件

时间:2018-08-19 08:47:06

标签: php curl iis

我想使用cURL从asp.net编写的网站下载excel文件。它使用“ post”方法的形式。如果使用浏览器,单击提交后可以获取文件,但是使用cURL时失败。这是我的代码:

$curl = new Curl();

$curl->setOptions([CURLOPT_COOKIE => $cookie]);

$res = $curl->run($url);

if (!$curl->error) {
    $xpath = $curl->xpath($res);

    $inputs = $xpath->evaluate('//form//input | //form//select');

    if ($inputs) {
        $postFields = [];

        for ($i = 0; $i < count($inputs); $i++) { 
            $postFields[$inputs->item($i)->getAttribute('name')] = $inputs->item($i)->getAttribute('value');
        }

        $header = [
            'Content-Length: ' . strlen(http_build_query($postFields)),
            // 'Referer: path/to/website'
        ];

        $file = fopen('tkb.xls', 'w+');
        if ($file === false) die('could not open file to write');

        $curl->setOptions([
            CURLOPT_VERBOSE => 1,
            CURLOPT_HEADER => 1,
            CURLOPT_POSTFIELDS => http_build_query($postFields),
            CURLOPT_FOLLOWLOCATION => 1,
            CURLOPT_COOKIE => $cookie,
            CURLOPT_FILE => $file,
            // CURLOPT_HTTPHEADER => $header,
            // CURLOPT_REFERER => 'path/to/website.aspx',
            // CURLOPT_POST => 1,
            // CURLOPT_POSTREDIR => 2,
            // CURLOPT_MAXREDIRS => 1,
        ]);

        $res = $curl->run($url, 'post');

        if(!$res) echo $curl->message;
        else {
            fwrite($file, $res);
            fclose($file);
        }

        $res = !$curl->error;
        $curl->close();
        return $res;
    }
}
else die($curl->message);

当我将CURLOPT_FOLLOWLOCATION设置为0时,服务器返回响应代码 302找到,并且对象移到了此处 ,并具有与上一页相同的链接。 当我将CURLOPT_FOLLOWLOCATION设置为1时,服务器返回 411所需长度错误。我尝试将$ header与选项CURLOPT_HTTPHEADER一起使用,但不起作用,超时后代码被破坏。 我使用CURLOPT_VERBOSE来查看日志:按照重复的位置重定向同一页面的无穷大。我不明白为什么。 我还搜索了类似“使用curl时出现302错误”,“ 411错误”之类的内容,但没有更多运气。谁能帮我? (对不起,我的英语)

0 个答案:

没有答案