我正在尝试从我无法控制的网址中检索文件。 url不会为文件大小设置内容长度标题(即它始终设置为零(0))。
尽管如此,使用浏览器可以正确下载文件。
但是,我正在尝试使用curl复制相同的操作,但curl始终返回空数据。我猜这是因为服务器设置了“Content-Length:0”。
我怎样才能绕过这个并获取文件,就像浏览器一样?
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec ($ch);
curl_close($ch);
我使用它的所有内容都是一堆标题:
HTTP/1.1 200 OK Date: Wed, 05 Mar 2014 04:48:23 GMT Server: Apache/2.2 Content-disposition: attachment; filename="file.txt" Content-Length: 0 Vary: User-Agent,Accept-Encoding Content-Type: text/plain
但是,当我使用浏览器时,文件会被正常下载。
NB :我也注意到命令行中与curl的行为相同!
答案 0 :(得分:0)
经过大量研究,包括监控浏览器请求(即标题)日志和控制卷曲论坛,我意识到浏览器正在发送'Accept-Encoding'请求标头,该标头为压缩响应数据提供支持。
我能够使用命令行选项 - 压缩
来模仿这个在php中你必须修改请求:
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_ENCODING , "");
curl_setopt($ch, CURLOPT_URL, $url);
$response = curl_exec ($ch);
curl_close($ch);