我只是使用file_get_contents()来获取来自这样的用户的最新推文:
$tweet = json_decode(file_get_contents('http://api.twitter.com/1/statuses/user_timeline/User.json'));
这在我的localhost上工作正常但是当我将它上传到我的服务器时它会抛出此错误:
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...
不确定是什么导致它,也许我需要在我的服务器上设置php配置?
提前致谢!
阅读本文:stackoverflow.com/questions/697472/
请参阅[此堆栈问题] [1],因为它可能会回答您的问题。 [1]:stackoverflow.com/questions/3710147/
谢谢彼得布鲁克斯! 那很有效!
您可能希望尝试使用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)以获得更详细的错误。
您可以使用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
关于本的回答只是一个小补遗。
根据PHP手册,可以在使用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);