2009-08-16 7 views

risposta

34

LWP ha questa funzionalità integrata, grazie a HTTP::Message. Ma è un po 'nascosto.

Per prima cosa assicurarsi di aver installato Compress::Zlib in modo da poter gestire gzip. HTTP::Message::decodable() visualizzerà un elenco di codifiche consentite in base ai moduli installati; in contesto scalare, questo output assume la forma di una stringa delimitata da virgole che è possibile utilizzare con l'intestazione HTTP 'Accept-Encoding', che è necessario aggiungere LWP al proprio HTTP::Request-s. (Sul mio sistema, con Compress::Zlib installato, la lista è "gzip, x-gzip, deflate".)

Quando il HTTP::Response torna, essere sicuri di accedere al contenuto con $response->decoded_content invece di $response->content.

In LWP::UserAgent, si parla tutti insieme in questo modo:

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; 

Questo sarà anche decodificare testo per le stringhe Unicode di Perl. Se solo desidera LWP per decomprimere la risposta, e non si scherza con il testo, fare in questo modo:

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

Nota: Questo funziona con LWP 5.814 (da luglio 08) o più recente. –

+3

Dal mio test con LWP 6.03 tutto ciò che era necessario era usare 'decoded_content' piuttosto che' content'. – Cas