LWP::UserAgent を使用して gzip 圧縮されたコンテンツを受け入れるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1285305

  •  18-09-2019
  •  | 
  •  

質問

Perl を使用して Web 上でいくつかのページを取得しています LWP::UserAgent そしてできるだけ丁寧に対応したいと思っています。デフォルトでは、 LWP::UserAgent gzip を介して圧縮コンテンツをシームレスに処理しません。全員の帯域幅を節約するために、そうする簡単な方法はありますか?

役に立ちましたか?

解決

LWP にはこの機能が組み込まれています。 HTTP::Message. 。でも、ちょっと隠れてるんです。

まず、持っていることを確認してください Compress::Zlib あなたが扱えるようにインストールされています gzip. HTTP::Message::decodable() インストールしたモジュールに基づいて、許可されたエンコーディングのリストが出力されます。スカラー コンテキストでは、この出力は、' とともに使用できるカンマ区切りの文字列の形式になります。Accept-Encoding' HTTP ヘッダー、 LWP に追加する必要があります 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');
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top