【发布时间】:2012-02-18 18:08:42
【问题描述】:
我需要获取一个页面的内容,该页面总是发送一个Content-Length: 0 标头,但是该页面永远不会为空。
file_get_contents(url) 只返回一个空字符串。
页面返回的整个header是:
HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.10
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Sat, 18 Feb 2012 18:14:59 GMT
Cache-Control: no-store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=UTF-8
Content-Length: 0
Date: Sat, 18 Feb 2012 18:14:59 GMT
Server: lighttpd
是否可以使用 file_get_contents 并忽略标题,还是我需要使用 curl?
编辑
get_headers(url) 输出(使用print_r):
Array
(
[0] => HTTP/1.0 200 OK
[1] => X-Powered-By: PHP/5.3.10
[2] => Content-type: text/html
[3] => Content-Length: 0
[4] => Connection: close
[5] => Date: Sat, 18 Feb 2012 22:39:52 GMT
[6] => Server: lighttpd
)
【问题讨论】:
-
你确定没有重定向或类似的事情发生吗?是否将错误通知站点的系统管理员?你试过
file_get_contents()- 它真的听content-length标头吗? -
很奇怪。我想你可以试试
fread(),因为你可以在那里指定一个长度。不知道它是否会起作用 - 我会与网站管理员交谈,如果响应包含数据,这显然是一个错误 -
所有检索 URL 正文内容的 PHP 函数都会忽略标题并带来内容。检查 allow_url_fopen 指令、error_reporting 以及目标是否会以某种方式阻止您。你可以在你的问题上粘贴 get_headers() 吗?
-
您确定请求应该返回文本吗?我问这个是因为那里有一些网站会根据您在请求中添加的标题类型(“接受”、“用户代理”等)返回不同的结果。这些标头由您的浏览器添加,但在使用 PHP 时必须由您手动添加
-
@Optimist 是缺少 User-Agent 标头导致服务器返回空字符串。奇怪的是,无论如何,
Content-Length: 0响应标头始终存在。如果您将评论添加为答案,我将接受它作为正确答案。
标签: php http-headers file-get-contents http-content-length