file_get_contents 抛出 400 Bad Request 错误 PHP

Posted

技术标签:

【中文标题】file_get_contents 抛出 400 Bad Request 错误 PHP【英文标题】:file_get_contents throws 400 Bad Request error PHP 【发布时间】:2012-01-18 22:43:16 【问题描述】:

我只是使用file_get_contents() 来获取来自这样的用户的最新推文:

$tweet = json_decode(file_get_contents('http://api.twitter.com/1/statuses/user_timeline/User.json'));

这在我的本地主机上运行良好,但是当我将它上传到我的服务器时,它会抛出这个错误:

警告: file_get_contents(http://api.twitter.com/1/statuses/user_timeline/User.json) [function.file-get-contents]:打开流失败:HTTP 请求失败! HTTP/1.0 400 错误请求...

不确定是什么原因造成的,可能是我需要在服务器上设置的 php 配置?

提前致谢!

【问题讨论】:

阅读:***.com/questions/697472/… 请参阅[this stack question][1],因为它可能会回答您的问题。 [1]:***.com/questions/3710147/… 感谢彼得布鲁克斯!成功了! 【参考方案1】:

您可能想尝试使用 curl 而不是 file_get_contents 来检索数据。 curl 对错误处理有更好的支持:

// make request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.twitter.com/1/statuses/user_timeline/User.json"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch);   

// convert response
$output = json_decode($output);

// handle error; error output
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) 

  var_dump($output);


curl_close($ch);

这可能会让您更好地了解收到错误的原因。一个常见的错误是达到服务器的速率限制。

【讨论】:

您应该打印curl_error($ch) 以获得更详细的错误。【参考方案2】:

只是对 Ben 的回答的一点补充。 根据PHP manual,可以在使用 curl_init() 初始化 cURL 句柄时设置 CURLOPT_URL 选项。

// make request
$ch = curl_init("http://api.twitter.com/1/statuses/user_timeline/User.json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$output = curl_exec($ch);   

// convert response
$output = json_decode($output);

// handle error; error output
if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) 

  var_dump($output);


curl_close($ch);

【讨论】:

【参考方案3】:

您可以使用file_get_contentsignore_errors 选项设置为true,这样您将在出现错误时获得整个响应体(例如HTTP/1.1 400),而不仅仅是一个简单的false

您可以在此处查看示例:https://***.com/a/11479968/3926617

如果您想访问响应的标头,可以在请求后使用$http_response_header

http://php.net/manual/en/reserved.variables.httpresponseheader.php

【讨论】:

以上是关于file_get_contents 抛出 400 Bad Request 错误 PHP的主要内容,如果未能解决你的问题,请参考以下文章

尝试执行 PayPal 付款请求时出现 HTTP 400 错误。 (file_get_contents)

file_get_contents获得一个网址的时候提示failed to open stream: HTTP request failed! HTTP/1.1 400 Bad

file_get_contents() 错误

如何避免从 ExpressJS 抛出 400 错误

从不同的工作表调用子时抛出 400

Google App Engine OAuth 端点在生产中抛出 400