HTTP ステータスは、文字で判定しちゃだめな理由(HTTP/1.1 200 OK以外のパターンがある)

HTTP ステータスは、文字で判定しちゃだめな理由(HTTP/1.1 200 OK以外のパターンがある)のイメージ php

Rakuten Web APIで商品アイテム検索するPHPプログラムを利用しています。PHPのfile_get_contents関数でWeb Requestしています。

リクエスト部分するソースは↓こんな感じです。

$context = stream_context_create(array('http' => array('igore_errors' => true)));
$response = file_get_contents($url, false, $context);
  1. php.iniに「allow_url_fopen = On」設定が必要な場合があります。
  2. リクエストした応答は$responseに入ってきます。
  3. 応答部のヘッダは、PHP予約変数 $http_response_header[php.net]配列を参照するとわかります。

$http_response_header配列は直前に行なったwebリクエスト(file_get_contents)の内容となります。通常以下のように配列の0番目にHTTPのステータスがあります。

  • [0]”HTTP/1.1 200 OK”
  • [1]”Date: Sat, 12 Apr 2008 17:30:38 GMT”
  • [2]”Server: Apache/2.2.3 (CentOS)”
  • [3]”Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT”
  • [4]”ETag: “280100-1b6-80bfd280″”
  • [5]”Accept-Ranges: bytes”
  • [6]”Content-Length: 438″
  • [7]”Connection: close”
  • [8]”Content-Type: text/html; charset=UTF-8″

これを参考に「OK」=成功、「OK」なしなら失敗という判断をしていました。
ところが・・・楽天APIのサーバーが変わったようで、結果が変わっていました。
[0]”HTTP/1.1 200 200″
OKがありません。プログラムは「 200 」に変更しました。

HTTPステータスは文字列ではなく数値で判断するのが良さそうですね。

コメント

タイトルとURLをコピーしました