Pregunta

Estoy utilizando WWW :: Mecanizar y en la actualidad el manejo de las respuestas HTTP con el encabezado 'Content-Encoding: gzip' en mi código comprobando en primer lugar los encabezados de respuesta y luego usando IO :: :: Descomprimir Gunzip para obtener el contenido sin comprimir.

Sin embargo, me gustaría hacer esto de forma transparente para que WWW :: Mecanizar métodos como la forma (), enlaces () en el trabajo, etc., y analizar el contenido sin comprimir. Desde WWW :: Mecanizar es una subclase de LWP :: agente de usuario, yo prefiero usar el LWP :: :: UA manipuladores para hacer esto.

Mientras que he tenido un éxito parcial (puedo imprimir el contenido sin comprimir, por ejemplo), no soy capaz de hacer esto de manera transparente y que puedo llamar

$mech->forms();

En resumen:? ¿Cómo "reemplazar" el contenido dentro del objeto $ mech por lo que desde ese punto en adelante, todos WWW :: Mecanizar métodos funcionan como si el Content-Encoding nunca ocurrió

Le agradecería su atención y ayuda. Gracias

¿Fue útil?

Solución

Otros consejos

A mi me parece como se puede reemplazar mediante el miembro $ res-> contenido ($ bytes).

Por cierto, me encontré con este material examinado la fuente de LWP :: agente de usuario, a continuación, HTTP :: Response, a continuación, HTTP :: Mensaje .

Está construido con el agente de usuario y por lo tanto mecanizar. Una advertencia importante para ahorrar un poco de pelo

-Para depuración, asegúrese de comprobar el error $ @ después de la llamada a decoded_content.

$html = $r->decoded_content;
die $@ if $@;

Mejor aún, mirar a través de la fuente de HTTP :: mensaje y asegúrese de que todos los paquetes de soporte están ahí

En mi caso, decoded_content volvió undef mientras que el contenido es binario, y fue en una búsqueda inútil. Agente de usuario establecerá el indicador de error en caso de fallo de decodificar, pero Mechanize simplemente lo ignorará (No comprueba o ingrese la incidencia como su propio error / advertencia).

En mi caso $ @ sez: "No se puede encontrar IO / HTML.pm .. Se eval'ed

Después de tener que sumergirse en la fuente, me entero de la incorporada en el proceso de decodificación es larga, minuciosa y ardua, que cubre casi todos los escenarios y haciendo un montón de conjeturas (Gracias Gisle!).

Si usted es paranoico, establecer explícitamente el encabezado predeterminado que se utilizará con cada petición al nuevo ()

    $browser = new WWW::Mechanize('default_headers' => HTTP::Headers->new('Accept-Encoding' 
                            => scalar HTTP::Message::decodable()));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top