2009-06-22 17 views
5

me gustaría escribir un guión para acceder a una aplicación web y luego pasar a otras partes de la aplicación :¿Cómo uso el LWP de Perl para iniciar sesión en una aplicación web?

use HTTP::Request::Common qw(POST); 
use LWP::UserAgent; 
use Data::Dumper; 

$ua = LWP::UserAgent->new(keep_alive=>1); 

my $req = POST "http://example.com:5002/index.php", 
[ user_name  => 'username', 
    user_password => "password", 
    module  => 'Users', 
    action  => 'Authenticate', 
    return_module => 'Users', 
    return_action => 'Login', 
]; 

my $res = $ua->request($req); 
print Dumper(\$res); 
if ($res->is_success) { 
    print $res->as_string; 
} 

Cuando trato de este código no soy capaz de iniciar sesión en la aplicación. El código de estado HTTP devuelto es 302 que se encuentra, pero sin datos.

Si publico el nombre de usuario/contraseña con todas las cosas requeridas, entonces debe devolver la página de inicio de la aplicación y mantener la conexión activa para mover otras partes de la aplicación.

Respuesta

15

Es posible que pueda usar para este propósito WWW::Mechanize:

Mech es compatible con la realización de una secuencia de captaciones de páginas incluyendo los siguientes enlaces y enviar formularios. Cada página captada se analiza y se extraen sus enlaces y formularios. Se puede seleccionar un enlace o un formulario, rellenar los campos del formulario y obtener la siguiente página. Mech también almacena un historial de las URL que ha visitado, que se pueden consultar y volver a visitar.

9

supongo que LWP no está siguiendo la redirección:

push @{ $ua->requests_redirectable }, 'POST'; 

Cualquier razón por la cual no se está usando WWW::Mechanize?

1

He usado LWP para iniciar sesión en un montón de sitios web y hacer cosas con el contenido, por lo que no debería haber ningún problema para hacer lo que desee. Su código se ve bien hasta ahora, pero dos cosas me gustaría sugerir: $ UA-> cookie_jar ({:

  1. Como se ha mencionado, es posible que tenga que hacer las peticiones redirectable
  2. También puede ser necesario para habilitar las cookies });

Espero que esto ayude

Cuestiones relacionadas