Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Auto login en formulario web Responder al tema
Nuevo tema


Página 1 de 1  [ 4 mensajes ] 
 
Nota 2011-12-29 11:58 @540

Perlero Nuevo
Registrado: 2011-12-29 11:44 @531
Mensajes: 2
Auto login en formulario web
Hola a todos,

Estoy tratando de realizar lo siguiente:

Tengo un dispositivo que tiene un pequeño servidor web. Tiene un archivo xml (http://IP_dispositivo/counters.xml) que quiero consultar regularmente y automáticamente para recoger su información. El problema es que para acceder a ese archivo tengo que registrarme previamente (http://IP_dispositivo/frameCmd_Login.htm) en el siguiente formulario:

Syntax: [ Download ] [ Hide ]
Using html4strict Syntax Highlighting
  1. <form method="get"  action="/Action_Login" onsubmit="return MD5HASH()">
  2. <font color="#000000" align="center">Please Enter Password</font>
  3. <input size="21" type="password" value="" name="LOGINPASSWORD" id="PD" />
  4. <input name="submit" type="submit" value="LOGIN" />


Lo he intentado usando los módulos LWP y URL, pero no sé hacerlos funcionar correctamente; soy novato con este lenguaje. El script que he probado es el siguiente:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use LWP::UserAgent;
  3.  
  4. my $ua = new LWP::UserAgent;
  5. my $req = new HTTP::Request(GET => 'http://IP_dispositivo/frameCmd_Login.htm');
  6. $req->authorization_basic("password123");
  7.  
  8. my $res = $ua->request($req);
  9.  
  10. if ($res->is_success)
  11. {
  12.     my $file = $res->content;
  13.     print $file;
  14. }
  15. else
  16. {
  17.     die $res->status_line;
  18. }
  19.  


También he probado con el módulo WWW::Mechanize de la siguiente manera:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use WWW::Mechanize;
  4. my $mech = WWW::Mechanize->new();
  5.  
  6. $mech->get( $url );
  7.  
  8. $mech->follow_link( url => 'http://IP_dispositivo/frameCmd_Login.htm' );
  9.  
  10. $mech->submit_form(
  11.     form_number => 1,
  12.     fields      => {
  13.         LOGINPASSWORD    => 'password123',
  14.     }
  15. );


Pero no entiendo muy bien cómo funciona.

Lo que estoy intentado hacer es, primero registrarme en la primera página (login) y posteriormente descargarme y analizar el archivo xml.

¿Alguien sabe cómo podría realizar esto correctamente? ¿Podéis echarme una mano?

Gracias por todo,

David


Nota 2011-12-29 18:31 @813
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Auto login en formulario web
Bienvenido a los foros de Perl en español, dseira.

El proceso de registro no está explicado del todo. Sabemos que hay que llamar a /Action_Login, pero no sabemos cuál es el resultado de la función MD5HASH().

Ni LWP ni WWW::Mechanize ejecutarán ese JavaScript, así que antes hay que averiguar qué es lo que hace.

_________________
JF^D Perl programming


Nota 2012-01-18 11:26 @518

Perlero Nuevo
Registrado: 2011-12-29 11:44 @531
Mensajes: 2
Re: Auto login en formulario web
Hola explorer,

Perdón por el retraso, pero he estado muy liado estoy días entre fiestas y demás.

Te comento, la función MD5HASH tiene el siguiente código:

Syntax: [ Download ] [ Hide ]
Using javascript Syntax Highlighting
  1.         function MD5HASH()
  2.         {
  3.           var output;
  4.           output = MD5(document.getElementById("PD").value);   
  5.           document.getElementById("PD").value = output;
  6.                 return true;
  7.         }
  8.  


Un saludo.


Nota 2012-01-18 11:47 @532
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Auto login en formulario web
Bien, entonces esto es lo que pasa: el usuario pulsa el botón de envío. El formulario pasa control a la función MD5HASH(), que calcula el MD5 de la contraseña que ha escrito el usuario en la caja 'PD', y devuelve un true, para que se lleve a cabo el envío del formulario.

Entonces, para tú hacer lo mismo desde Perl, debes darle al campo LOGINPASSWORD el valor MD5 de la contraseña. Ese valor lo puedes sacar con la ayuda del módulo Digest::MD5:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. use Digest::MD5 'md5';
  2.  
  3. # ... más adelante ...
  4.  
  5.     LOGINPASSWORD => md5('password123'),


A propósito... esta es la forma más correcta de trabajar con contraseñas: la contraseña del usuario nunca es transmitida en claro por la red, sino su conversión a MD5, siendo un método muy seguro, sobre todo si hay software espiando por la red.

_________________
JF^D Perl programming


Responder al tema  [ 4 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO