Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

file_get_contents throws 400 Bad Request error 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!

like image 425
Javier Villanueva Avatar asked Dec 13 '11 00:12

Javier Villanueva


2 Answers

You might want to try using curl to retrieve the data instead of file_get_contents. curl has better support for error handling:

// 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); 

This may give you a better idea why you're receiving the error. A common error is hitting the rate limit on your server.

like image 154
Ben Rowe Avatar answered Sep 22 '22 21:09

Ben Rowe


You can use file_get_contents adding the ignore_errors option set to true, 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 simple false.

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

like image 20
Wandeber Avatar answered Sep 19 '22 21:09

Wandeber