2009-08-16 13 views

Respuesta

34

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'); 
+0

Nota: Esto funciona con LWP 5.814 (julio 08) o más reciente. –

+3

De mi prueba con LWP 6.03, todo lo que se requería era usar 'decoded_content' en lugar de' content'. – Cas

Cuestiones relacionadas