WWW::Mechanize 是繼承 libwww-perl 中 LWP::UserAgent 的工具,所以這個方式通用於兩者...
首先是在取得資料時加上 Accept-Encoding: gzip
的 header,這可以在產生物件時指定,之後就都會送出:
my $ua = LWP::UserAgent->new;
$ua->default_header('Accept-Encoding' => 'gzip');
取回後直接透過 HTTP::Response 的 decoded_content 幫你處理:
my $res = $ua->get($uri);
my $msg = $res->decoded_content;
取回的 $msg
會是 Perl internal encoding,要變成 UTF-8 還需要透過 Encode 的 encode('utf8', $msg)
。
這樣只要 server-side 有支援 gzip 就會自動壓縮並且在本地端解開,沒壓縮也沒關係,HTTP::Response 會依照 Content-Type
處理。
Update:clkao 指出 WWW::Mechanize 預設值就會包括 gzip 設定,剛剛拿 code.jquery.com 測試沒錯。
I thought gzip in request is default for mechanize if you have zlib? see WWW::Mechanize::_modify_request
你說的對,WWW::Mechanize 預設值就有把 gzip 打開...