LWPでgzip圧縮されたコンテンツの取得

LWP::UserAgentを使って某FC2の某RSSを取得してたら、どうみてもUTF-8らしからぬデータが返ってきて焦った。
早速、某エディタを使って作業か・・・と思ったら、
某campで先頭4byteを見て某U先生が「これはgzipですね」と言っていたシグニチャを覚えていたので、gunzip余裕でした。


さて、LWP::UserAgentはそのままではダメらしいが、
リクエストヘッダのAccept-Encodingに与えておくとちゃんとやってくれるらしい。
先人様様。

LWP::UserAgent で gzip, deflate のデータを受け取る
http://d.hatena.ne.jp/littlebuddha/20111018/1318933627

use LWP::UserAgent;
my $ua = new LWP::UserAgent();
$ua->default_header('accept-encoding' => 'gzip,x-gzip,deflate');
$ua->mirror('http://.../?xml', './hage.xml');

mirrorにはヘッダを指定するオプションがないので、
デフォルトヘッダにくっつけてあげることで解決します。


某FC2はこっちの都合を聞かず勝手にgzipしてくるという不親切設計ってことでFA。
ちなみに某doorはちゃんとヘッダをみて圧縮するか否か決めてくれていたようです。