私はPerlのLWP::UserAgent
を使ってウェブ上のいくつかのページを取得しており、可能な限り丁寧になりたいと考えています。デフォルトでは、LWP::UserAgent
はgzipで圧縮されたコンテンツをシームレスに処理しません。誰もが帯域幅を節約するために、そうするための簡単な方法はありますか?LWP :: UserAgentを使用してgzip圧縮コンテンツを受け入れる方法はありますか?
20
A
答えて
34
LWPには、HTTP::Message
のおかげで、この機能が組み込まれています。しかし、それは少し隠されています。
gzip
を処理できるように、最初にCompress::Zlib
がインストールされていることを確認してください。 HTTP::Message::decodable()
は、インストールしたモジュールに基づいて許可されたエンコードのリストを出力します。この出力は、スカラーコンテキストでは、Accept-Encoding
'HTTPヘッダーで使用できるカンマ区切り文字列の形式をとります。LWP
には、自分でHTTP::Request
-sを追加する必要があります。 (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');
関連する問題
注:これは(7月8日から)LWP 5.814で動作します以降。 –
LWP 6.03のテストでは、 'content'ではなく' decoded_content'を使うだけでした。 – Cas