2012-06-06 17 views
8

Quindi sto utilizzando WWW::Mechanize per eseguire la ricerca per indicizzazione dei siti. E le grandi opere, a meno che chiedo un URL come:Perl WWW :: Mechanize (o LWP) ottiene l'URL di reindirizzamento

http://www.levi.com/ 

sto ridiretti su:

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

E per il mio script ho bisogno di sapere che questo reindirizzamento ha avuto luogo e che cosa l'url che è stato reindirizzato a è. È comunque in grado di rilevare questo con WWW::Mechanize o LWP e quindi ottenere l'URL reindirizzato? Grazie!

risposta

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

Se il codice di stato è 3XX, allora si dovrebbe verificare le intestazioni di risposta per il reindirizzamento degli URL.

+1

Eeeek !!! Grande. Grazie mille :) – srchulo

+0

Se volessi consentire nuovamente i reindirizzamenti, o come reimpostare il conteggio di reindirizzamento, c'è un modo per farlo? O per esempio, potrei seguire una serie di reindirizzamenti nella loro posizione finale e sapere ancora che lo stato era tra 300 e 400? Mi sono liberato di max_redirect (0), ma poi ho appena ottenuto lo stato di 500 e so che non è giusto ... – srchulo

+0

se qualcuno lo guarda come riferimento, semplicemente la memorizzazione di un nuovo oggetto WWW :: Mechanize in $ mech fa trucco. – srchulo

Problemi correlati