2016-11-26 3 views
1

Ich versuche mit Perl5 und LWP :: UserAgent auf eine Site zuzugreifen. Bei der Verbindung stirbt das Skript jedoch mit der Meldung "403 Zugriff verweigert". Der komische Teil ist, dass es einwandfrei funktioniert mit WWW :: Mechanize, aber der Abrufcode ist genau derselbe. Normalerweise würde ich vermuten, dass der Benutzeragent die Ursache ist, aber wie bereits erwähnt, ist der Code in beiden Fällen derselbe.403 Fehler bei der Verwendung von LWP :: UserAgent aber nicht mit WWW :: Mechanize

Gibt es einen Unterschied darin, wie WWW :: Mechanize und LWP :: UserAgent Anfragen behandeln, die dieses Problem verursachen könnten?

Hier ist ein Beispielcode, der zwei verschiedene Ansätze zeigt.

# Mechanize 
use strict; 
use warnings "all"; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(
    agent_alias => 'Mozilla/5.0', 
    show_progress => 1); 

my $mech->get("www.foo.com"); 

# LWP 
use strict; 
use warnings "all"; 
use LWP::UserAgent; 

my $ua = LWP::UserAgent->new(
    agent_alias => 'Mozilla/5.0', 
    show_progress => 1); 

my $r = $ua->get("www.foo.com"); 

Antwort

2

Es gibt keine agent_alias Argument dokumentiert, weder für LWP :: Useragent noch für WWW :: Mechanize. Und es gibt auch kein agent_alias Argument implementieren. Stattdessen wird das Argument in beiden Fällen ignoriert und verwendet die integrierte Standard. Aber der Standard ist anders. Es gibt eine agent_aliasMethode obwohl für WWW :: Mechanize. Von the documentation:

... Zum Beispiel

$mech->agent_alias('Windows IE 6'); 

setzt Ihre User-Agent zu

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) 

Nach dem documentation of LWP::UserAgent das Argument Sie wollen tatsächlich verwenden ist richtig genannt agent und standardmäßig auf libwww-perl/#.### (die #.### ist die Versionsnummer). Mit WWW :: Mechanize kann dasselbe Argument verwendet werden, aber der dokumentierte andere Standardwert ist WWW-Mechanize/#.##.

+0

Es wäre nett zu sagen, dass der richtige Parameter für 'neue' heißt' agent', und Sie sollten sagen, was die Standard-User-Agent-Zeichenfolgen sind – Borodin

+1

@Borodin: Sie haben Recht. Ich habe diese Informationen zu meiner Antwort hinzugefügt. –

+0

Danke. Es erscheint seltsam, dass eine Seite * Forbidden * für "libwww-perl" und nicht für "WWW-Mechanize" zurückgibt. Es muss ein hart codierter Ausschluss sein, und nicht ein sehr effektiver! – Borodin

Verwandte Themen