2010-02-05 7 views
8

J'ai un script Perl qui utilise LWP::UserAgent pour télécharger une page Web qu'il traite ensuite en utilisant des expressions régulières. Le problème est que les parties de la page Web qui sont du HTML normal ne sont pas renvoyées à LWP :: UserAgent car le site reconnaît que le navigateur n'a pas installé Flash et renvoie à la place du HTML nous demandant de télécharger Flash au lieu du HTML approprié nous devons analyser. Comment puis-je faire en sorte que LWP :: UserAgent semble avoir installé Flash sur le serveur Web à partir duquel nous demandons la page? J'utilise le code suivant pour initialiser LWP :: UserAgent:Comment faire pour que LWP :: UserAgent semble avoir installé Flash?

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); 

Merci d'avance pour votre aide!

+0

"télécharger une page Web qu'il traite ensuite en utilisant des expressions régulières". Oh mec. – jrockway

+0

Consultez cette page: http://stackoverflow.com/questions/2124560/how-can-i-make-lwpuseragent-look-like-another-browser/2124775#2124775 Où je réponds à cette question. En résumé, si la détection est effectuée dans l'en-tête Accept/User-Agent, c'est simple. Si la détection est faite avec flash, ou javascript, cela pourrait être plus difficile. Quoi qu'il en soit, vous devez savoir ce que vous envoyez au serveur et ce que vous obtenez. –

Répondre

0

Les deux @Michael & @dma_k étaient corrects. Le serveur ne vérifiait pas si LWP :: UserAgent avait flash installé. Au lieu de cela, pour une raison quelconque, le contenu renvoyé n'était pas sauvegardé correctement pendant que nous essayions de déboguer le script. Malheureusement, nous n'avons pas trouvé un moyen de résoudre ce problème, mais après quelques essais et erreurs, nous avons trouvé comment extraire les champs appropriés de la page. Désolé qu'il n'y a pas vraiment une bonne réponse pour celui-ci.

0

Le site teste probablement si flash est installé en utilisant javascript. Souvent, ce test est côté client uniquement et ne devrait pas affecter la page. Mais peut-être qu'ils lancent une demande asynchrone disant au serveur que Flash est installé. Pour tester cela, vous devez télécharger TamperData, charger la fenêtre TamperData dans le menu Outils et actualiser la page. La fenêtre vous montrera toutes les demandes qui sont déclenchées et vous pouvez les inspecter. S'il y a une demande comme http://whatever.com/flash_test.php?flash_installed=true, vous pouvez rejouer cette demande en utilisant LWP.

Une autre option consiste à décompiler l'application Flash. C'est très facile à faire et souvent vous obtiendrez la source complète, y compris les commentaires de code, et voici un free trial.

+0

FireBug serait bien ici aussi. L'important est de capturer la (les) conversation (s) entre le client et le serveur afin que vous puissiez reproduire les bits pertinents. – Ether

+0

Oui, cela semble être le cas: http://www.adobe.com/support/flash/how/shock/javaplugs/javaplugs02.html – ziya

+0

Yeah firebug est génial, mais il vous donne moins d'informations sur le trafic que tamperdata. – rook

1

Je vous recommande d'utiliser Firebug pour cela - très bon et puissant addon pour FF. Je suis d'accord avec Michael, que le serveur peut apprendre de telles informations sur le client uniquement à partir des en-têtes qui lui sont envoyés, ou du script, qui s'exécute sur le client et peut parler au serveur (JavaScript, Flex, ...). Pour le cas de JavaScript, vous pouvez essayer de le désactiver dans FF temporaire et essayer de recharger la page: si le serveur vous répond de la même manière que pour LWP, alors vous connaissez la réponse.

Questions connexes