J'utilise simplement une file_get_contents()
pour obtenir les derniers tweets d'un utilisateur comme celui-ci:
$Tweet = json_decode(file_get_contents('http://api.Twitter.com/1/statuses/user_timeline/User.json'));
Cela fonctionne très bien sur mon localhost mais quand je le télécharge sur mon serveur, il génère cette erreur:
Avertissement: file_get_contents ( http://api.Twitter.com/1/statuses/user_timeline/User.json ) [ function.file-get-contents]: impossible d'ouvrir le flux: la requête HTTP a échoué! HTTP/1.0 400 Mauvaise demande ...
Vous ne savez pas ce qui pourrait en être la cause, peut-être une configuration php que je dois définir sur mon serveur?
Merci d'avance!
Vous voudrez peut-être essayer d'utiliser curl pour récupérer les données au lieu de file_get_contents. curl prend mieux en charge la gestion des erreurs:
// 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);
Cela peut vous donner une meilleure idée de la raison pour laquelle vous recevez l'erreur. Une erreur courante atteint la limite de débit sur votre serveur.
Vous pouvez utiliser file_get_contents
en ajoutant le ignore_errors
option définie sur true
, vous obtiendrez ainsi tout le corps de la réponse en cas d'erreur (HTTP/1.1 400, par exemple) et pas seulement un simple false
.
Vous pouvez voir un exemple ici: https://stackoverflow.com/a/11479968/3926617
Si vous souhaitez accéder aux en-têtes de réponse, vous pouvez utiliser $http_response_header
après la demande.
http://php.net/manual/en/reserved.variables.httpresponseheader.php
Juste un petit addendum sur la réponse de Ben. Selon le manuel PHP , l'option CURLOPT_URL peut être définie lors de l'initialisation du handle cURL avec 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);