2011-12-13 38 views
21

Sólo estoy usando un file_get_contents() para obtener los últimos tweets de un usuario de esta manera:file_get_contents lanza 400 Bad Request error de PHP

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

Esto funciona muy bien en mi localhost pero cuando me lo cargue en mi servidor se lanza este 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...

No

seguro de lo que podría ser la causa de que, tal vez una configuración php necesito fijar en mi servidor?

¡Gracias de antemano!

+0

leyeron: http://stackoverflow.com/questions/697472/file-get-contents-returning-failed-to-open-stream-http-request-failed –

+2

Por favor, véase [esta pila pregunta] [1] ya que probablemente le responda la pregunta. [1]: http://stackoverflow.com/questions/3710147/php-get-content-of-http-400-response –

+0

Gracias Peter Brooks! ¡Eso funciono! – javiervd

Respuesta

23

Es posible que desee intentar usar curl para recuperar los datos en lugar de file_get_contents. curl tiene mejor soporte para el manejo de errores:

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

Esto puede darle una mejor idea de por qué está recibiendo el error. Un error común es alcanzar el límite de velocidad en su servidor.

+1

Debe imprimir 'curl_error ($ ch)' para obtener un error más detallado. –

0

Solo un pequeño apéndice sobre la respuesta de Ben. De acuerdo con PHP manual, la opción CURLOPT_URL se puede establecer al incializar el controlador cURL con curl_init().

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

Puede utilizar file_get_contents añadiendo la opción ignore_errors establecido en true, de esta manera obtendrá todo el cuerpo de la respuesta en caso de error (HTTP/1.1 400, por ejemplo) y no sólo un simple false .

Se puede ver un ejemplo aquí: https://stackoverflow.com/a/11479968/3926617

Si desea tener acceso a las cabeceras de respuesta, puede utilizar $http_response_header después de la solicitud.

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

Cuestiones relacionadas