perl - ¿Cómo puedo aceptar el contenido comprimido gzip usando LWP:: UserAgent?
content-encoding (1)
LWP tiene esta capacidad incorporada, gracias a HTTP::Message
. Pero está un poco escondido.
Primero asegúrese de tener instalado Compress::Zlib
para que pueda manejar gzip
. HTTP::Message::decodable()
generará una lista de codificaciones permitidas basadas en los módulos que ha instalado; en el contexto escalar, este resultado toma la forma de una cadena delimitada por comas que puede usar con el encabezado HTTP '' Accept-Encoding
'', que LWP
exige agregar a su HTTP::Request
-s usted mismo. (En mi sistema, con Compress::Zlib
instalado, la lista es " gzip
, x-gzip
, deflate
").
Cuando vuelva a aparecer su HTTP::Response
, asegúrese de acceder al contenido con $response->decoded_content
lugar de $response->content
.
En LWP::UserAgent
, todo se une así:
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 a las cadenas Unicode de Perl. Si solo desea que LWP
descomprima la respuesta y no se meta con el texto, haga lo siguiente:
print $response->decoded_content(charset => ''none'');
Estoy buscando algunas páginas en la Web usando 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?