file_get_contents HTTP 请求失败

Posted

技术标签:

【中文标题】file_get_contents HTTP 请求失败【英文标题】:file_get_contents HTTP request failed 【发布时间】:2014-11-19 15:04:27 【问题描述】:

我编写了简单的 php 代码来获取一些 url 内容,但它不起作用 它返回此错误

file_get_contents(http://www.nature.com/nature/journal/v508/n7496/full/nature13001.html) [function.file-get-contents]:打开流失败:HTTP 请求失败! HTTP/1.0 401 未经授权

这是我的代码。请帮帮我.tnx

$content=file_get_contents('http://www.nature.com/nature/journal/v508/n7496/full/nature13001.html');
echo $content;

【问题讨论】:

"HTTP/1.0 401 Unauthorized" 你这是什么意思? en.wikipedia.org/wiki/List_of_HTTP_status_codes 而且,file_get_contents 的http wrapper 不会发送正常的http 头,可以在服务器端识别... 阅读更新的评论。如果您能够使用浏览器访问此 URL,但 file_get_contents 给您该错误,那么您必须使用 cURL,例如,发送完整的 http 标头集。顺便说一句,您可以从学院/大学网络访问该文章,但如果脚本在校园网络之外的某些服务器上运行,它也会出现此 401 错误。 你的意思是这是我的代码$content=file_get_contents("http://www.nature.com/nature/journal/v508/n7496/full/nature13001.html"); 我只需要这个url的内容和浏览器显示的一样。用于模式加工和数据挖掘。 对不起,我也尝试使用 cURL 但它不起作用:( 【参考方案1】:

这是使用cURL 的file_get_contents 的替代方案:

$url = 'http://www.example.com';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
$data = curl_exec($curl);
curl_close($curl);

如果遇到编码问题,您可能需要添加此curl_setopt($curl, CURLOPT_ENCODING ,"");

【讨论】:

对不起,我也尝试使用 cURL 但它不起作用:( @saboteur 这怎么不起作用?你能解释一下吗? 它返回类似这样的内容 ‹ÿŒUÛnÛ8¶ý‡‰_Ò‘•lÒÝ$kHÚb_vƒ¢ÈC€ 45–~ò"” 我尝试更改编码,但没有任何反应 添加这一行:curl_setopt($curl, CURLOPT_ENCODING ,"");【参考方案2】:

    使用浏览器打开页面并打开控制台,看到服务器确实发送了 401,即使页面已发送且可见

    在 php 上,以另一种方式打开 url 以忽略错误(请参阅http://php.net/manual/en/context.http.php)

    您还会注意到它是 gzip 编码的,请参阅 http://php.net/manual/en/function.gzinflate.php

黑客愉快!

【讨论】:

以上是关于file_get_contents HTTP 请求失败的主要内容,如果未能解决你的问题,请参考以下文章

file_get_contents HTTP 请求失败

file_get_contents - 无法打开流:HTTP 请求失败! HTTP/1.1 404 未找到

PHP http(file_get_content) GET与POST请求方式

PHP file_get_contents() 返回“打开流失败:HTTP 请求失败!”

file_get_contents(“php:// input”)或$ HTTP_RAW_POST_DATA,哪一个更好地获取JSON请求的主体?

file_get_contents("php://input") 或 $HTTP_RAW_POST_DATA,哪一个更适合获取 JSON 请求的正文?