file_get_contentsが400 Bad RequestエラーPHPをスローする

2011-12-13 php json file-get-contents

次のように、 file_get_contents()を使用して、ユーザーから最新のツイートを取得しています。

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

これは私のローカルホストでは正常に動作しますが、サーバーにアップロードすると、次のエラーがスローされます。

警告: 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不正なリクエスト...

何が原因かわからない、おそらく私のサーバーで設定する必要があるphp設定ですか?

前もって感謝します!

Answers

file_get_contentsの代わりにcurlを使用してデータを取得してみてください。 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);

これにより、エラーが発生する理由がわかります。一般的なエラーは、サーバーのレート制限に達しています。

ベンの答えのほんの少しの補遺。 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);

ignore_errorsオプションをtrueに設定してfile_get_contentsを使用すると、単純なfalseだけでなく、エラー(たとえば、HTTP / 1.1 400)が発生した場合に応答の本文全体を取得できfalse

ここで例を見ることができます: https : //stackoverflow.com/a/11479968/3926617

応答のヘッダーにアクセスする場合は、リクエストの後に$http_response_headerを使用できます。

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

Related