Estoy buscando algunas páginas en la Web usando Perl's LWP::UserAgent
y me gustaría ser lo más educado posible. Por defecto, LWP::UserAgent
no maneja perfectamente el contenido comprimido a través de gzip. ¿Hay alguna manera fácil de hacerlo, para ahorrarles a todos ancho de banda?¿Cómo puedo aceptar el contenido comprimido gzip usando LWP :: UserAgent?
Respuesta
LWP tiene esta capacidad incorporada, gracias a HTTP::Message
. Pero está un poco escondido.
Primero asegúrese de tener Compress::Zlib
instalado para que pueda manejar gzip
. HTTP::Message::decodable()
generará una lista de codificaciones permitidas en función de los módulos que haya instalado; en contexto escalar, esta salida toma la forma de una cadena comine-delineated que puede usar con el encabezado HTTP 'Accept-Encoding
', que LWP
requiere que agregue usted mismo a su -sí mismo. (En mi sistema, instalado con Compress::Zlib
, la lista es "gzip
, x-gzip
, deflate
".)
Cuando su HTTP::Response
vuelve, asegúrese de tener acceso al contenido con $response->decoded_content
en lugar de $response->content
.
En LWP::UserAgent
, todo se une de esta manera:
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;
Esto también decodificar texto para cadenas Unicode de Perl. Si sólo se desea LWP
para descomprimir la respuesta, y no te metas con el texto, hacerlo de esta manera:
print $response->decoded_content(charset => 'none');
- 1. Cómo almacenar contenido Apache GZIP comprimido
- 2. ¿Cómo puedo hacer que LWP :: UserAgent parezca tener Flash instalado?
- 3. ¿Puedo forzar a LWP :: UserAgent a aceptar un certificado SSL caducado?
- 4. ¿Por qué no puedo asignar una IP a LWP :: UserAgent?
- 5. ¿Por qué no funcionan mis credenciales de LWP :: UserAgent?
- 6. ¿Cómo puedo ver un archivo comprimido contenido
- 7. ¿Cómo hacer que JMeter solicite contenido comprimido?
- 8. Gestionar contenido comprimido en Android
- 9. PHP - Envío de gzip comprimido JS/CSS
- 10. Contenido estático no comprimido en IE9 desde IIS7
- 11. ¿Cómo comprobar si un archivo está comprimido gzip?
- 12. ¿Cómo saber si un archivo está comprimido gzip?
- 13. ¿Puedo deshabilitar GZIP en Google App Engine?
- 14. Perl: LWP :: UserAgent devuelve siempre el código 200 para las URL redirigidas
- 15. ¿Cómo configurar User-Agent con LWP?
- 16. maneja lwp timeout efectivamente
- 17. Contenido estático Express gzip
- 18. ¿Cómo puedo rastrear un archivo comprimido sin leer todo su contenido?
- 19. ¿Puedo comprimir solicitudes HTTP usando GZIP?
- 20. Cómo configurar Content-Encoding con gzip
- 21. ¿Cómo obtengo el contenido de un archivo comprimido usando la biblioteca rubyzip?
- 22. ¿Es posible cargar gzip javascript comprimido sin un servidor web?
- 23. Sirviendo gzip contenido de django
- 24. ¿Cómo envío datos de POST con LWP?
- 25. Spoof IP con Perl LWP
- 26. Tiempo de espera verdadero en LWP :: Método de solicitud de UserAgent
- 27. ¿Cómo puedo extraer o descomprimir archivos gzip usando php?
- 28. Cómo PUBLICAR contenido con una solicitud HTTP (Perl)
- 29. Cambiar el userAgent de NSURLConnection
- 30. Android: la comunicación HTTP debe usar "Aceptar codificación: gzip"
Nota: Esto funciona con LWP 5.814 (julio 08) o más reciente. –
De mi prueba con LWP 6.03, todo lo que se requería era usar 'decoded_content' en lugar de' content'. – Cas