perl - 如何使用 LWP::UserAgent 接受 gzip 压缩的内容?

标签 perl lwp content-encoding

我正在使用 Perl 的 LWP::UserAgent 通过 Web 获取一些页面。并希望尽可能有礼貌。默认情况下,LWP::UserAgent不能通过 gzip 无缝处理压缩内容。有没有一种简单的方法可以做到这一点,为每个人节省一些带宽?

最佳答案

由于 HTTP::Message ,LWP 内置了此功能.但是有点隐蔽。
首先确保你有 Compress::Zlib 安装以便您可以处理 gzip . HTTP::Message::decodable() 将根据您安装的模块输出允许的编码列表;在标量上下文中,此输出采用逗号分隔的字符串形式,您可以将其与 ' Accept-Encoding 一起使用' HTTP header , 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');

关于perl - 如何使用 LWP::UserAgent 接受 gzip 压缩的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1285305/

相关文章:

打印时 Perl OO 父类(super class)变量未绑定(bind)到子类对象

html - 从字符串中提取 HTML 标签名称

arrays - 如何循环进入数组哈希值的哈希值?

html - 使用 perl LWP lib 传递表单数据时遇到问题

PHP ob_start() 和 ob_start ('ob_gzhandler' )

perl - LWP UserAgent 帖子 @list

perl - wget 与 Perl 的 lwp 有何不同?

perl - 我可以在 WWW::Mechanize 的 POST 中将空格编码为 %20 吗?

java - 如何区分 HTTPURLConnection 中的请求和响应?

iis - 在 IIS7 中,gzipped 文件不会保持这种状态