私はPerlを使用してWeb経由でいくつかのページをフェッチしておりLWP::UserAgent
、可能な限り丁寧になりたいと思っています。デフォルトでは、 LWP::UserAgent
gzipを介して圧縮コンテンツをシームレスに処理しません。誰もが帯域幅を節約するために、そうする簡単な方法はありますか?
1 に答える
のおかげで、LWPにはこの機能が組み込まれていHTTP::Message
ます。しかし、それは少し隠されています。
まず、Compress::Zlib
を処理できるようにインストールしたことを確認してくださいgzip
。HTTP::Message::decodable()
インストールしたモジュールに基づいて許可されたエンコーディングのリストを出力します。Accept-Encoding
スカラーコンテキストでは、この出力は、' ' HTTPヘッダーで使用できるコンマで区切られた文字列の形式を取ります。これには、自分で-sLWP
を追加する必要があります。HTTP::Request
(私のシステムでは、インストールされている場合、Compress::Zlib
リストは「、、gzip
」です。)x-gzip
deflate
戻ってきたら、必ず。の代わりにHTTP::Response
を使用してコンテンツにアクセスしてください。$response->decoded_content
$response->content
ではLWP::UserAgent
、すべてが次のようにまとめられます。
my $ua = LWP::UserAgent->new;
my $can_accept = HTTP::Message::decodable;
my $response = $ua->get('http://stackoverflow.com/feeds',
'Accept-Encoding' => $can_accept,
);
print $response->decoded_content;
これにより、テキストがPerlのUnicode文字列にデコードされます。応答を解凍するだけLWP
で、テキストを混乱させたくない場合は、次のようにします。
print $response->decoded_content(charset => 'none');