• Publicidad

Hacer un POST a un login

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Hacer un POST a un login

Notapor Leyenda1 » 2012-06-13 02:00 @125

Hola, bueno todos, soy nuevo en este foro.

Me gustaría que me guiaran para poder hacer un programa en Perl que haga una POST a un login de una página web y luego de hacerlo verificar hacia donde redirecciona dicha página, ya que cuando uno hace un intento de registro malo, lo redirecciona a http://www.ll.com y cuando se registra correctamente me redirecciona a otra web, ejemplo: http://www.hh.com...

Lo que no puedo hacer es identificar hacia donde me va a redireccionar luego de hacer el POST a la página...

Espero su ayuda.
Gracias de antemano.
Leyenda1
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-05-21 01:11 @091

Publicidad

Re: Hacer un POST a un login

Notapor explorer » 2012-06-13 07:29 @354

Bienvenido a los foros de Perl en Español, Leyenda1.

Lo que sí puedes obtener es la respuesta del POST.

Si se trata de una redirección, vendrá indicada en la cabecera HTTP o en las primeras líneas de la página HTML, con un <meta... refresh>.

Sería algo así (no probado):

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use HTTP::Request::Common qw(POST);
  2. use LWP::UserAgent;
  3. $ua = LWP::UserAgent->new;
  4.  
  5. ## Construimos el POST
  6. my $req = POST 'http://servidor/ruta/al/recurso.html',
  7.           [
  8.               usuario  => 'yomismo',
  9.               password => 'el-que-sea',
  10.           ];
  11.  
  12. ## Hacemos el POST
  13. my $respuesta = $ua->request($req);       # es un objeto de la clase HTTP::Response
  14.  
  15. print $respuesta->as_string;              # sacamos la respuesta a pantalla, para verificar
  16.  
  17. my @redireccion = $respuesta->redirects;  # lista de redirecciones obtenidas
  18.  
  19. print "Redirecciones:\n";
  20. print join("\n", @redireccion), "\n";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Debes cambiar 'usuario' y 'password' por los nombres de los campos del formulario POST.

Hay un programa, que deberías tener instalado porque viene con Perl, llamado lwp-request, que sirve para hacer POST desde la línea de comandos.

Más información en lwpcook y HTTP::Response.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Hacer un POST a un login

Notapor Leyenda1 » 2012-06-14 03:29 @186

Gracias por tu pronta respuesta, pues funciona bien, solo que el código que regresa el servidor luego de hacer el POST es el mismo si se loguea bien o mal, lo único que cambia es el location: y muestra a donde redireccionará...

Cómo puedo comparar con un if() ese "location:" para saber si es igual a la página correcta, que me imprima login correcto...

Esto es lo que me imprime:

HTTP/1.1 302 Found
Connection: close
Date: Thu, 14 Jun 2012 08:13:19 GMT
Location: http://www.web.com/index.php?// login correcto
Server: Apache/2.2.16
Vary: Accept-Encoding
Content-Length: 0
Content-Type: text/html
Client-Date: Thu, 14 Jun 2012 07:24:30 GMT
Client-Peer: 65.164.151.248:80
Client-Response-Num: 1
Set-Cookie: unh_sess=MDUxMTE5OTIwMDAxOSwyNjE4Mjg1MTcsT
SSUEgRkVSTkFOREVaLDQsMQ%3D%3D; path=/; httponly
X-Powered-By: PHP/5.3.3-7+squeeze9
Leyenda1
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-05-21 01:11 @091

Re: Hacer un POST a un login

Notapor explorer » 2012-06-14 04:42 @238

¿El programa no devuelve nada con @redireccion?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Hacer un POST a un login

Notapor Leyenda1 » 2012-06-14 10:44 @488

No, solo dice Redirecciones: y no muestra nada. Antes de eso muestra lo que puse arriba :S
Leyenda1
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-05-21 01:11 @091

Re: Hacer un POST a un login

Notapor explorer » 2012-06-14 11:31 @521

Pues entonces se toma el valor de $respuesta->as_string;, y se pasa por una expresión regular, para extraer el valor que nos interesa.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $cabecera = $respuesta->as_string;
  2.  
  3. my($location) = $cabecera =~ /Location: (.+)/;
  4.  
  5. print "[$location]\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Y ya puedes ejecutar un if() para comparar uno con otro.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Hacer un POST a un login

Notapor Leyenda1 » 2012-06-14 12:20 @556

hago esto y no entra al if()

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($location!="http://www.web.edu/index.php"){
  2.  
  3.                                         print "login correcto";
  4.                                
  5. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Edito:

Ya me funciona. Hice esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if($location =~ m/www.web.com/){
  2. print " \n \nlogin correcto\n \n";
  3.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Gracias por tu ayuda, espero seguir aprendiendo más por aquí:

Saludos.
Leyenda1
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2012-05-21 01:11 @091

Re: Hacer un POST a un login

Notapor explorer » 2012-06-14 13:04 @586

¡Esto es Perl!

Cuando se comparan cadenas de caracteres, hay que usar 'eq' (igualdad) o 'ne' (desigualdad).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($location ne 'http://www.web.com/index.php') {
  2.     print "login correcto\n";
  3. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero sí, con una expresión regular ampliamos las posibilidades de concordancia:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($location =~ m/www\.web\.com/) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 18 invitados