2009-08-16 16 views

Antwort

34

LWP hat diese Fähigkeit eingebaut, dank HTTP::Message. Aber es ist ein bisschen versteckt.

Zuerst sicherstellen, dass Sie Compress::Zlib installiert haben, damit Sie gzip behandeln können. HTTP::Message::decodable() gibt eine Liste der erlaubten Kodierungen basierend auf den Modulen aus, die Sie installiert haben; Im skalaren Kontext nimmt diese Ausgabe die Form einer durch Kommas definierten Zeichenfolge an, die Sie mit dem HTTP-Header 'Accept-Encoding' verwenden können, den Sie LWP hinzufügen müssen, um Ihre HTTP::Request -s selbst hinzuzufügen. (Auf meinem System mit Compress::Zlib installiert, die Liste ist "gzip, x-gzip, deflate".)

Wenn Ihr HTTP::Response zurückkommt, müssen Sie den Inhalt mit $response->decoded_content statt $response->content zuzugreifen.

In LWP::UserAgent, es kommt alles zusammen wie folgt aus:

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; 

Dies wird auch Text in das Perl Unicode-Strings dekodieren. Wenn Sie nurLWP wollen die Antwort auf dekomprimieren, und nicht Chaos mit dem Text, zu tun wie so:

print $response->decoded_content(charset => 'none'); 
+0

Hinweis: Dies funktioniert mit LWP 5,814 (Juli 08) oder neuer. –

+3

Von meinem Test mit LWP 6.03 war alles, was benötigt wurde, "decoded_content" anstatt "content" zu verwenden. – Cas