Sto recuperando alcune pagine sul Web utilizzando Perl LWP::UserAgent
e vorrei essere il più educato possibile. Per impostazione predefinita, LWP::UserAgent
non gestisce il contenuto compresso tramite gzip. C'è un modo semplice per farlo fare così, per salvare tutti un po 'di larghezza di banda?Come posso accettare il contenuto compresso con gzip usando LWP :: UserAgent?
risposta
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');
- 1. LWP :: UserAgent autenticazione HTTP di base
- 2. Perché le mie credenziali LWP :: UserAgent non funzionano?
- 3. Come impostare User-Agent con LWP?
- 4. Perché non riesco ad assegnare un IP a LWP :: UserAgent?
- 5. LWP :: UserAgent e 500 negoziazione SSL non riuscita
- 6. Il pacchetto compresso gzip Webpack non viene servito, il pacchetto non compresso è
- 7. Come POST il contenuto con una richiesta HTTP (Perl)
- 8. Come fare una richiesta PUT HTTP usando LWP?
- 9. IP spoofato con Perl LWP
- 10. come gzip il contenuto in asp.net MVC?
- 11. Come posso visualizzare un contenuto di file compresso
- 12. Posso comprimere gzip tutto il mio contenuto html (pagine)
- 13. Come decodificare Gzip corpo della richiesta compresso in Spring MVC
- 14. Posso comprimere le richieste HTTP usando GZIP?
- 15. Come ottenere JMeter per richiedere il contenuto gzip?
- 16. Contenuto statico gzip espresso
- 17. Come posso convertire un InputStream non compresso in un InputStream gzip in modo efficiente?
- 18. Come posso inviare JSON compresso (gzip) come risposta a una richiesta Ajax, da Java?
- 19. Perl: LWP :: UserAgent restituisce sempre il codice 200 per gli URL reindirizzati
- 20. Come impostare Content-Encoding con gzip
- 21. Contenuto statico non gzip in IE9 da IIS7
- 22. Comprimere il contenuto con PHP ob_start() vs Apache Deflate/Gzip?
- 23. Come si inviano i dati POST con LWP?
- 24. Come posso creare una richiesta POST JSON con LWP?
- 25. Come ottenere il contenuto gzip di invio come risposta PHP
- 26. Come posso controllare Windows Phone useragent con javascript?
- 27. Fornisce contenuto gzip da django
- 28. È possibile caricare gzip compresso javascript senza un server web?
- 29. Come posso ottenere il contenuto di CKEditor usando JQuery?
- 30. Come decodificare "Content-Encoding: gzip, gzip" usando curl?
Nota: Questo funziona con LWP 5.814 (da luglio 08) o più recente. –
Dal mio test con LWP 6.03 tutto ciò che era necessario era usare 'decoded_content' piuttosto che' content'. – Cas