挙動の違いがあったのでメモ.
サーバプログラム
use strict; use warnings; use Plack::Builder; builder { enable 'Deflater'; # Don't use version 0.10 sub { [200, [], ["hello world\n"]]} }
LWP::UserAgent
レスポンスオブジェクトの contentメソッドでは圧縮されたデータ、
decode_contentメソッドでは伸長されたデータ(文字コードも decodeされる)が
返ります.
use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new(); $ua->default_header('Accept-Encoding' => 'gzip'); my $res = $ua->get('http://localhost:5000'); die "Can't get" unless $res->is_success; print $res->content; # 圧縮されたデータ print $res->decoded_content; # 伸長されたデータ("Hello World\n")
Furl
Furlではレスポンスオブジェクトの contentメソッドで伸長された
データが返ってきます.
use strict; use warnings; use Furl; my $ua = Furl->new( headers => [ "Accept-Encoding" => 'gzip' ], ); my $res = $ua->get('http://localhost:5000'); die "Can't get" unless $res->is_success; print $res->content; # 伸長されたデータ("Hello World\n")
Accept-Encoding: gzipを指定した際, decoded_contentメソッドを
使うと undefが返るという問題がありましたが, 2.18で修正されました.