当Content-Length未设置或为零时,使用PHP Curl检索常规文件

时间:2014-03-05 04:50:59

标签: php curl

我正在尝试从我无法控制的网址中检索文件。 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的行为相同!

1 个答案:

答案 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);