« 反転生活を改善するぞ | メイン | カレーを少し辛くして »
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