2010-02-05 18 views
8

Tengo un script Perl que usa LWP::UserAgent para descargar una página web que luego procesa usando expresiones regulares. El problema es que partes de la página web que son HTML normales no se devuelven a LWP :: UserAgent ya que el sitio reconoce que el navegador no tiene Flash instalado y en su lugar devuelve HTML solicitándonos que descarguemos Flash en lugar del HTML apropiado que necesitamos analizar.¿Cómo puedo hacer que LWP :: UserAgent parezca tener Flash instalado?

¿Cómo puedo hacer que LWP :: UserAgent parezca tener flash instalado en el servidor web desde el que estamos solicitando la página? Estoy utilizando el siguiente código para inicializar LWP :: UserAgent:

use LWP::UserAgent; 
my $ua = LWP::UserAgent->new(cookie_jar => { },requests_redirectable => [ ]); 
$ua->agent('Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:9.9.9.9) Gecko/20079999 Firefox/2.0.0.1'); 
$ua->timeout(10); 

Gracias de antemano por su ayuda!

+0

"descargue una página web que luego procesa utilizando expresiones regulares". Oh hombre. – jrockway

+0

Echa un vistazo a esta página: http://stackoverflow.com/questions/2124560/how-can-i-make-lwpuseragent-look-like-another-browser/2124775#2124775 Donde respondo esta pregunta. En resumen, si la detección se realiza en el encabezado Accept/User-Agent, esto es simple. Si la detección se realiza con flash o javascript, podría ser más difícil. Sin embargo, de cualquier manera, necesita saber lo que está enviando al servidor y lo que está recibiendo. –

Respuesta

0

Ambos @Michael & @dma_k eran correctos. El servidor no estaba verificando si LWP :: UserAgent tenía flash instalado. En cambio, por algún motivo, el contenido devuelto no se estaba descargando correctamente mientras intentábamos depurar el script. Desafortunadamente no encontramos una manera de solucionar esto, pero después de un ensayo y error descubrimos cómo sacar los campos apropiados de la página. Lamento que no haya una respuesta correcta para esta.

0

Probablemente el sitio esté probando si flash está instalado usando javascript. A menudo, esta prueba es solo del lado del cliente y no debe afectar la página. Pero tal vez están lanzando una solicitud asíncrona diciéndole al servidor que el flash está instalado. Para probar esto, debe descargar TamperData, cargar la ventana TamperData del menú de herramientas y actualizar la página. La ventana le mostrará todas las solicitudes que se están disparando y puede inspeccionarlas. Si hay alguna solicitud como http://whatever.com/flash_test.php?flash_installed=true, puede volver a realizar esta solicitud utilizando LWP.

Otra opción es descompilar la aplicación flash. Esto es muy fácil de hacer y, a menudo obtendrá la fuente completa, incluidos los comentarios del código, y aquí hay un free trial.

+0

FireBug sería bueno aquí también. Lo importante es capturar la (s) conversación (s) entre el cliente y el servidor para que pueda reproducir los bits relevantes. – Ether

+0

Sí, ese parece ser el caso: http://www.adobe.com/support/flash/how/shock/javaplugs/javaplugs02.html – ziya

+0

Sí Firebug es genial, pero le da menos información de tráfico que tamperdata. – rook

1

Yo le recomendaría usar Firebug para eso - complemento muy agradable y potente para FF. Estoy de acuerdo con Michael en que el servidor puede obtener dicha información sobre el cliente solo desde los encabezados que se le envían, o desde un script, que se ejecuta en el cliente y puede comunicarse con el servidor (JavaScript, Flex, ...). Para el caso de JavaScript puede intentar desactivarlo en FF temporal e intentar volver a cargar la página: si el servidor le responde lo mismo que para LWP, entonces ya conoce la respuesta.

Cuestiones relacionadas