2009-08-16 101 views

回答

34

LWP内置此功能,感谢HTTP::Message。但它有点隐藏。

首先确保您已安装Compress::Zlib,以便您可以处理gzipHTTP::Message::decodable()将根据您安装的模块输出允许的编码列表;在标量上下文中,此输出采用逗号分隔的字符串形式,您可以与'Accept-Encoding'HTTP标头一起使用,其中LWP要求您自行将其添加到HTTP::Request-s。 (在我的系统,安装Compress::Zlib,名单是“gzipx-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'); 
+0

注:这适用于LWP 5.814(自08年7月)或更高版本。 – 2009-10-18 21:07:03

+3

从我使用LWP 6.03进行测试时,所有需要的只是使用'decoded_content'而不是'content'。 – Cas 2013-04-02 18:05:51