¿Cómo uso el LWP de Perl para iniciar sesión en una aplicación web?
-
06-07-2019 - |
Pregunta
Me gustaría escribir un script para iniciar sesión en una aplicación web y luego pasar a otras partes de la aplicación:
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 pruebo este código no puedo iniciar sesión en la aplicación. El código de estado HTTP devuelto es 302 que se encuentra, pero sin datos.
Si publico nombre de usuario / contraseña con todas las cosas requeridas, debería devolver la página de inicio de la aplicación y mantener la conexión activa para mover otras partes de la aplicación.
Solución
Puede utilizar WWW :: Mechanize para este propósito:
Mech admite realizar una secuencia de búsqueda de páginas, incluidos los siguientes enlaces y el envío de formularios. Cada página captada se analiza y se extraen sus enlaces y formularios. Se puede seleccionar un enlace o un formulario, se pueden completar los campos del formulario y se puede recuperar la página siguiente. Mech también almacena un historial de las URL que ha visitado, que se pueden consultar y volver a visitar.
Otros consejos
Supongo que LWP
no sigue la redirección:
push @{ $ua->requests_redirectable }, 'POST';
¿Alguna razón por la que no está utilizando WWW :: Mechanize ?
He usado LWP para iniciar sesión en muchos sitios web y hacer cosas con el contenido, por lo que no debería haber ningún problema para hacer lo que desea. Su código se ve bien hasta ahora, pero sugiero dos cosas:
- Como se mencionó, es posible que deba hacer que las solicitudes sean redireccionables
- También es posible que deba habilitar las cookies: $ ua- > cookie_jar ({});
Espero que esto ayude