Come posso accettare il contenuto gzip utilizzando LWP :: UserAgent?
-
18-09-2019 - |
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?
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');