2012-06-06 8 views
8

So verwende ich WWW::Mechanize zum Crawlen von Websites. Es funktioniert großartig, außer wenn ich eine URL wie anfordern:Perl WWW :: Mechanize (oder LWP) bekommen Umleitung URL

http://www.levi.com/ 

Ich bin an umgeleitet:

http://us.levi.com/home/index.jsp 

Und für mein Skript muss ich wissen, dass diese Umleitung stattfand und was die URL I wurde umgeleitet. Gibt es denn eh das mit WWW::Mechanize oder LWP zu erkennen und dann die umgeleitete URL zu bekommen? Vielen Dank!

Antwort

9
use strict; 
use warnings; 
use URI; 
use WWW::Mechanize; 

my $url = 'http://...'; 
my $mech = WWW::Mechanize->new(autocheck => 0); 
$mech->max_redirect(0); 
$mech->get($url); 

my $status = $mech->status(); 
if (($status >= 300) && ($status < 400)) { 
    my $location = $mech->response()->header('Location'); 
    if (defined $location) { 
    print "Redirected to $location\n"; 
    $mech->get(URI->new_abs($location, $mech->base())); 
    } 
} 

Wenn der Statuscode 3XX ist, dann sollten Sie Response-Header für die Umleitung url überprüfen.

+1

wow! Groß. Vielen Dank :) – srchulo

+0

Wenn ich Weiterleitungen wieder zulassen wollte oder die Umleitungszählung zurücksetzen möchte, gibt es eine Möglichkeit, dass ich das tun könnte? Oder könnte ich zum Beispiel einer Reihe von Weiterleitungen zu ihrem endgültigen Standort folgen und trotzdem wissen, dass der Status zwischen 300 und 400 liegt? Ich wurde Max_redirect (0) los, aber dann habe ich nur einen Status von 500 und ich weiß, das ist nicht richtig ... – srchulo

+0

wenn jemand dies als Referenz betrachtet, speichert einfach ein neues WWW :: Mechanize-Objekt in $ Mech Trick. – srchulo

Verwandte Themen