22

私はPerlを使用してWeb経由でいくつかのページをフェッチしておりLWP::UserAgent、可能な限り丁寧になりたいと思っています。デフォルトでは、 LWP::UserAgentgzipを介して圧縮コンテンツをシームレスに処理しません。誰もが帯域幅を節約するために、そうする簡単な方法はありますか?

4

1 に答える 1

39

のおかげで、LWPにはこの機能が組み込まれていHTTP::Messageます。しかし、それは少し隠されています。

まず、Compress::Zlibを処理できるようにインストールしたことを確認してくださいgzipHTTP::Message::decodable()インストールしたモジュールに基づいて許可されたエンコーディングのリストを出力します。Accept-Encodingスカラーコンテキストでは、この出力は、' ' HTTPヘッダーで使用できるコンマで区切られた文字列の形式を取ります。これには、自分で-sLWPを追加する必要があります。HTTP::Request(私のシステムでは、インストールされている場合、Compress::Zlibリストは「、、gzip」です。)x-gzipdeflate

戻ってきたら、必ず。の代わりに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');
于 2009-08-16T20:56:54.353 に答える