2010-12-07 56 views
1

Je me suis frustré avec cela pendant trop d'heures. Je pense que cela devrait être simple mais j'ai évidemment quelque chose de fondamentalement faux. J'ai lu:Problèmes avec Perl Mechanize et Proxies

J'ai lu les docs CPAN pour: WWW-Mechanize/lib/WWW/Mechanize/FAQ.pod libwww-perl-5.837/lib/LWP/UserAgent.pm

Et chaque morceau de code ou d'article que j'ai pu trouver sur Google.

C'est la première fois que je cherche de l'aide sur Stack Overflow. Merci d'avance pour votre aide. Voici le code:

#!/usr/bin/perl 

use WWW::Mechanize; 

my $mech = WWW::Mechanize->new (agent => "Mozilla/5.0"); 

my $proxy = 'http://fetch4.me'; 

$mech->no_proxy('localhost'); 
$mech->proxy(['http', 'https', 'gopher'], $proxy) or die $!; 
$mech->get('http://www.google.com'); 

print $mech->uri(),"\n"; 
print $mech->content(),"\n"; 
print $mech->text(),"\n"; 
print $mech->status(),"\n"; 

Voici la sortie:

http://www.google.com 
<html>Apache is functioning normally</html> 

Apache is functioning normally 
200 

Je suis à court d'idées ici. Ce code fonctionne-t-il pour toi? Produit-t-il les mêmes résultats? Qu'est ce qui ne va pas avec ça? >. <

Nous vous remercions de votre temps.

Répondre

1

Est-ce que dire:

my $mech = WWW::Mechanize->new (agent => "Mozilla/5.0", noproxy => 1); 

aide?

La doc implique que vous devez faire cela pour éviter un appel implicite à env_proxy de LWP.

+0

Merci pour votre réponse ysth. J'ai fait la modification comme vous l'avez souligné et il semble n'avoir aucune influence sur la sortie. Assez curieusement si je remplace un domaine que je connais n'est pas en place ou bon au lieu de www.google.com je reçois la même sortie. Donc, il semble que même si le $ mech-> uri() indique que je reçois le contenu() de Google vient vraiment du proxy. – PSCO

+0

@PSCO: Je suggère de prendre Mech hors de l'équation; voyez si vous pouvez obtenir un mandataire en commençant par LWP :: UserAgent. – ysth

+0

Je vais essayer et rapporter. – PSCO

2

Le problème semble être dans le serveur fetch4.me. Essayez, par exemple, à la place

my $ proxy = 'http://124.207.162.87:80';

+0

Merci beaucoup pour votre contribution. Il semble fonctionner correctement maintenant. On dirait que j'avais tout bien sauf fetch4.me ne marcherait jamais. J'ai testé d'autres proxies, ils se comportaient tous de la même manière que fetch4me. J'ai trouvé une autre liste de proxies qui fonctionnera bien. Merci de m'avoir aidé à résoudre ce problème, j'étais vraiment frustré. Kinda se sentir bête maintenant aurait dû faire plus de tests. J'ai essayé d'évaluer votre réponse mais je n'ai pas assez de rep = \ – PSCO