file_get_contents抛出400 Bad Request错误PHP

时间:2011-12-13 00:14:07

标签: php json file-get-contents

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

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

这在我的localhost上工作正常但是当我将它上传到我的服务器时会抛出此错误:

  

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

不确定可能导致它的原因,也许我需要在我的服务器上设置php配置?

提前致谢!

3 个答案:

答案 0 :(得分:26)

您可能希望尝试使用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);

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

答案 1 :(得分:3)

您可以使用file_get_contents添加ignore_errors选项设置为true,这样您就可以在出现错误时获得整个响应(HTTP / 1.1 400,for例子)而不仅仅是一个简单的false

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

如果您想要访问回复标题,可以在请求后使用$http_response_header

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

答案 2 :(得分:1)

关于本答案的一点补遗。 根据{{​​3}},当使用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);