2009-05-21 13 views
11

Tengo un script Perl que usa WWW::Mechanize para leer desde un archivo y realizar algunas tareas automatizadas en un sitio web. Sin embargo, el sitio web utiliza un redireccionamiento 302 después de cada vez que solicito una determinada página. No quiero ser redireccionado (la página a la que redirige tarda demasiado para responder); Solo quiero recorrer el archivo y llamar al primer enlace una y otra vez. No puedo entender cómo hacer que WWW :: Mechanize NO siga los redireccionamientos. ¿Alguna sugerencia?¿Cómo puedo evitar que WWW :: Mechanize siga los redireccionamientos?

Respuesta

5

WWW :: Mechanize es una subclase de LWP :: UserAgent; puede establecer las opciones max_redirect o requests_redirectable en el constructor como lo haría con LWP :: UserAgent.

+0

He intentado establecer el max_redirect en 0, pero no lo afectó. – rfusca

+1

Si, de hecho, max_redirect no está afectando si LWP y Mech no siguen los redireccionamientos, entonces ese es un error que debería ser informado. –

4

Puede utilizar $ agent-> max_redirect (0) ;, como en este ejemplo:

#!/usr/bin/perl -w 
use strict; 

use WWW::Mechanize; 

my $agent = WWW::Mechanize->new('autocheck' => 1, 'onerror' => undef,); 
$agent->max_redirect(0); 
$agent->get('http://www.depesz.com/test/redirect'); 
printf("Got HTTP/%s from %s.\n", $agent->response->code, $agent->uri); 

$agent->max_redirect(1); 
$agent->get('http://www.depesz.com/test/redirect'); 
printf("Got HTTP/%s from %s.\n", $agent->response->code, $agent->uri); 

Cuando se ejecuta imprime:

Got HTTP/302 from http://www.depesz.com/test/redirect. 
Got HTTP/200 from http://www.depesz.com/. 

Así, con max_redirect (0) - se claramente no sigue redirecciones.

+0

Por extraño que parezca, cambiar el max_redirect a 0 no funcionó para mí (sospecho que es un error en otro lugar de mi código con ese efecto indirecto, ya que DEBERÍA funcionar), pero el cambio de requests_redirectable funcionó. – rfusca

+1

En otra nota ... uso su sitio web depesz.com todo el tiempo. Gran recurso para Postgres. – rfusca

Cuestiones relacionadas