2012-06-06 12 views
8

Así que estoy usando WWW::Mechanize para rastrear sitios. Funciona muy bien, excepto si solicito un enlace como:Perl WWW :: Mechanize (o LWP) obtener redirigir url

http://www.levi.com/ 

estoy redirigido a:

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

Y para mi guión necesito saber que esta redirección se llevó a cabo y cuál es la url I fue redirigido a es. ¿Hay alguna forma de detectar esto con WWW::Mechanize o LWP y luego obtener la URL redirigida? ¡Gracias!

Respuesta

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

Si el código de estado es 3XX, entonces usted debe comprobar las cabeceras de respuesta de redirección de URL.

+1

wow! Estupendo. Muchas gracias :) – srchulo

+0

Si quisiera permitir redirecciones de nuevo, o como reiniciar el conteo de redireccionamiento, ¿hay alguna manera de que yo pueda hacer eso? O, por ejemplo, ¿podría seguir una serie de redirecciones a su ubicación final y aún así saber que el estado estaba entre 300 y 400? Me deshice de max_redirect (0), pero acabo de obtener un estado de 500 y sé que no es correcto ... – srchulo

+0

si alguien mira esto como referencia, simplemente almacenar un nuevo objeto WWW :: Mechanize en $ mech hace truco. – srchulo

Cuestiones relacionadas