HTTP_Clientのバグ
HTTP_Client(1.0.0)にバグを発見。
とあるページを見てみたら無茶苦茶で…というのはいつものハナシなので省略。そこのサイト、サイト構成を最近変更したようで、以前に有効だったURLも変更になっていて、以前のURLについては302 Foundを返すようになっている。HTTP_Clientはこの場合ヘッダのLocationフィールドに示される新しいURLにリダイレクトすることになっているわけだけど、以前のURLでアクセスしたところ、最終的なレスポンスコードが302のままで、つまり行われるべきリダイレクトが行われていない。
調べてみるとここのサーバ、リダイレクト先のURLを「Location」ではなく「location」(最初のエルが小文字)で吐いていた。HTTP_Clientの親クラスであるHTTP_Requestは、ヘッダ情報をオリジナルのままと、全て小文字に変換したものとの両方を返し、どちらも利用できる…というか小文字のみを利用するほうが案パイなわけだけど、HTTP_Clientはこれを「Location」(エルが大文字)で参照していて、ここのサーバはそんなフィールドを吐いてないのでリダイレクトするべきURLが見つからないというのが原因。
HTTP_Client 1.0.0
HTTP/Client.phpの290行目。
$location = $request->getResponseHeader('Location');
これを以下のように修正するとこの問題は回避される。
$location = $request->getResponseHeader('location');
これだけのために拡張クラスを書くのもさすがに無駄なので、修正版のリリースを期待してとりあえずpear.php.netにバグレポートは入れてみた。
2005/10/21
トラックバック
このエントリーのトラックバックURL:
http://www.rcdtokyo.com/mt/mt-rcdtokyo5428-tb.cgi/12