« 反転生活を改善するぞ | メイン | カレーを少し辛くして »

2008年01月14日

LWP::UserAgent で長いヘッダを受け取る方法

Simple FON Maps を改良していたときに発生した問題。現在の FON Maps では、座標情報を X-Json というヘッダに格納して通信しています。

my $ua  = LWP::UserAgent->new(keep_alive => 1);
my $data = $ua->head($url)->header('X-Json');

このコードで概ねデータを取得できていたのですが、たまに、データを取得できていませんでした。

warn($ua->head($url)->status_line);

通信で何らかのエラーが発生している可能性があり、デバッグ用にコードを追加。

500 Line too long (limit is 4096)

どうやら、ヘッダの長さが長すぎるようです。

The "500 Line too long (limit is 4096)" is generated internally in Net::HTTP when one of the header lines of the response are longer than this.

日本語圏では、このエラーに関する対処方法が見つからなかったのですが、公式なメーリングリストで対処方法が記載されていました。

my $ua  = LWP::UserAgent->new(keep_alive => 1);
push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, MaxLineLength => 16 * 1024);

MaxLineLength に値を追加して解決。データを取得できないときもエラーログに残っていなかったため、気付くのが遅くなりました…。

【関連情報】
・Re: Fw: LWP Problem: Error: 500 Line too long (limit is 4096)
 http://www.mail-archive.com/libwww@perl.org/msg03754.html

2008年01月14日 02:59 | Programming

トラックバック

コメント