Domanda

Io sono il recupero di alcune pagine sul Web utilizzando LWP::UserAgent di Perl e vorrei essere più educato possibile. Per impostazione predefinita, LWP::UserAgent non perfettamente gestisce contenuto compresso tramite gzip. C'è un modo semplice per fargli fare così, per salvare tutti un po 'di larghezza di banda?

È stato utile?

Soluzione

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

Per prima cosa assicurarsi di aver Compress::Zlib installata in modo da poter gestire gzip. HTTP::Message::decodable() emetterà un elenco di ammessi codifiche in base ai moduli installati; nel contesto scalare, questa uscita assume la forma di una stringa virgola delineato che è possibile utilizzare con il 'Accept-Encoding' intestazione HTTP, che LWP richiede di aggiungere al vostro HTTP::Request -s te stesso. (Sul mio sistema, con Compress::Zlib installato, la lista è "gzip, x-gzip, deflate ".)

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

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 LWP per decomprimere la risposta, e non pasticciare con il testo, fare in questo modo:

print $response->decoded_content(charset => 'none');
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top