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.

¿Fue útil?

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:

  1. Como se mencionó, es posible que deba hacer que las solicitudes sean redireccionables
  2. También es posible que deba habilitar las cookies: $ ua- > cookie_jar ({});

Espero que esto ayude

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top