file_get_contents 抛出 400 Bad Request 错误 PHP
我只是使用 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 配置?
提前致谢!
I'm just using a file_get_contents()
to get the latest tweets from a user like this:
$tweet = json_decode(file_get_contents('http://api.twitter.com/1/statuses/user_timeline/User.json'));
This works fine on my localhost but when I upload it to my server it throws this error:
Warning: file_get_contents(http://api.twitter.com/1/statuses/user_timeline/User.json) [function.file-get-contents]:failed to open stream: HTTP request failed! HTTP/1.0 400 Bad Request...
Not sure what might be causing it, maybe a php configuration I need to set on my server?
Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可能想尝试使用curl而不是file_get_contents来检索数据。 curl 对错误处理有更好的支持:
这可能会让您更好地了解为什么会收到错误。一个常见的错误是达到服务器上的速率限制。
You might want to try using curl to retrieve the data instead of file_get_contents. curl has better support for error handling:
This may give you a better idea why you're receiving the error. A common error is hitting the rate limit on your server.
您可以使用
file_get_contents
添加ignore_errors
选项设置为true
,这样您将在出现错误时获得响应的完整正文(例如,HTTP/1.1 400)而不仅仅是一个简单的false
。您可以在此处查看示例: https://stackoverflow.com/a/11479968/3926617
如果您想访问响应的标头,您可以在请求后使用
$http_response_header
。http://php.net/manual/en/reserved.variables.httpresponseheader.php
You can use
file_get_contents
adding theignore_errors
option set totrue
, in this way you will get the entire body of the response in case of error (HTTP/1.1 400, for example) and not only a simplefalse
.You can see an example here: https://stackoverflow.com/a/11479968/3926617
If you want access to response's headers, you can use
$http_response_header
after the request.http://php.net/manual/en/reserved.variables.httpresponseheader.php
只是对本的回答做一点补充。
根据 PHP 手册,在初始化 cURL 时可以设置 CURLOPT_URL 选项用curl_init()处理。
Just a little addendum on Ben's answer.
According to the PHP manual the CURLOPT_URL option may be set when inizializing the cURL handle with curl_init().
在 file_get_contents 之前添加此代码
Add this code before file_get_contents