• Publicidad

Duda con formulario

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

Duda con formulario

Notapor BigBear » 2012-12-04 11:47 @533

Tengo el siguiente código :


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use LWP::UserAgent;
  2.  
  3. my $nave = LWP::UserAgent->new;
  4. $nave->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12");
  5. $nave->timeout(5);
  6.  
  7. my $url = "http://www.portalhacker.net" . "/index.php?action=login2";
  8.  
  9. print $url;
  10.  
  11. my $user = "test";
  12. my $pass = "test";
  13.  
  14. my $code = tomar( $url, { "user" => $user, "passwrd" => $pass, "cookielength" => "9000", "hash_passwrd" => "" } );
  15.  
  16. print $code;
  17.  
  18. if ( $code =~ /Hola <span>(.*?)<\/span>/ ) {
  19.     my $name = $1;
  20.     print "Bienvenido $name\n";
  21. }
  22.  
  23. open( test, ">>test.html" );
  24. print test $code;
  25. close test;
  26.  
  27. sub toma {
  28.     return $nave->get( $_[0] )->content;
  29. }
  30.  
  31. sub tomar {
  32.     my ( $web, $var ) = @_;
  33.     return $nave->post( $web, [ %{$var} ] )->content;
  34. }
  35.  
  36. #The End ?
  37.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo peor de todo es que no me muestra nada en la variable $code , ¿ alguien me podría indicar qué estoy haciendo mal ?
Última edición por explorer el 2012-12-04 13:39 @611, editado 1 vez en total
Razón: Formateado de código con Perltidy
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Duda con formulario

Notapor explorer » 2012-12-04 14:50 @659

No lo he probado, pero creo que la línea 33 la puedes reescribir así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     return $nave->post( $web, $var )->content;
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

Re: Duda con formulario

Notapor BigBear » 2012-12-04 17:00 @750

gracias por la ayuda pero sigue igual.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con formulario

Notapor explorer » 2012-12-04 18:38 @818

¿Y qué es lo que devuelve solo $nave->post( $web, $var )? Hazle un dump...
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: Duda con formulario

Notapor BigBear » 2012-12-04 19:18 @845

Ya revisé esos valores. De hecho cambié el código a la antigua y sigue sin devolver nada.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2.  
  3. use LWP::UserAgent;
  4. use warnings;
  5.  
  6. my $nave = LWP::UserAgent->new;
  7. $nave->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12");
  8. $nave->timeout(5);
  9.  
  10. my $url = "http://www.portalhacker.net"."/index.php?action=login2";
  11.  
  12. my $usera = "test";
  13. my $passa = "test";
  14.  
  15. my $final = $nave->post("http://www.portalhacker.net/index.php?action=login2",{"user"=>"test","passwrd"=>"test","cookielength"=>"60","hash_passwrd"=>"","submit"=>"Ingresar"});
  16. my $code = $final->content;
  17.  
  18. print $code;
  19.  
  20.  
  21. #The End ?
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con formulario

Notapor BigBear » 2012-12-05 13:02 @584

Perdón por el doble mensaje, pero intenté en Ruby y el error sigue, pero encontré este script en Python que sí anda.

Sintáxis: [ Descargar ] [ Ocultar ]
Using python Syntax Highlighting
  1.  
  2.     import urllib2
  3.     from urllib import urlencode
  4.      
  5.     diccionario={'user':'mr.blood','passwrd':'morbuntu','cookielength':'9000'}
  6.      
  7.     cookie = urllib2.HTTPCookieProcessor()
  8.      
  9.     opener = urllib2.build_opener(cookie)
  10.     urllib2.install_opener(opener)
  11.      
  12.     datos = urlencode(diccionario)
  13.      
  14.     direc = urllib2.urlopen('http://foro.portalhacker.net/index.php?action=login2', datos)
  15.      
  16.     print direc.read()
  17.     direc.close()
  18.      
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


¿ Notas algo en el código de Python que falte en el código de Perl aparte de usar cookies ?

También intenté usando cookies, como el código de Python, pero nada.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use LWP::UserAgent;
  2. #use warnings;
  3.  
  4. use HTTP::Cookies;
  5. use HTTP::Request::Common;
  6.  
  7. my $nave = LWP::UserAgent->new(
  8. cookie_jar => HTTP::Cookies->new(),
  9. requests_redirectable => [ ],
  10. timeout => 10,
  11. agent => "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0"
  12. );
  13.  
  14.  
  15. #my $nave = LWP::UserAgent->new;
  16. #$nave->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12");
  17. #$nave->timeout(5);
  18.  
  19. my $url = "http://www.portalhacker.net"."/index.php?action=login2";
  20.  
  21. print $url;
  22.  
  23. my $usera = "test";
  24. my $passa = "test";
  25.  
  26. my $code = tomar($url,{"user"=>$usera,"passwrd"=>$passa,"cookielength"=>"9000","hash_passwrd"=>"","submit"=>"submit"});
  27.  
  28. print $code;
  29.  
  30. if($code=~/Hola <span>(.*?)<\/span>/) {
  31. my $name = $1;
  32. print "Bienvenido $name\n";
  33. }
  34.  
  35.  
  36. open(test,">>test.html");
  37. print test $code;
  38. close test;
  39.  
  40. sub toma {
  41. return $nave->get($_[0])->content;
  42. }
  43.  
  44. sub tomar {
  45. my ($web,$var) = @_;
  46. return $nave->post($web,[%{$var}])->content;
  47. }
  48.  
  49. #The End ?
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con formulario

Notapor explorer » 2012-12-05 17:58 @790

Creo que ya sé lo que pasa: si haces esa petición y ves lo que te devuelve (insisto: dump), entonces ves que te ha devuelto un 302, que es una redirección, indicando que debes ir a una dirección de este estilo:

http://www.portalhacker.net/index.php?P ... mber=91147

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
$VAR1 = bless( {
                 '_protocol' => 'HTTP/1.1',
                 '_content' => '',
                 '_rc' => '302',
                 '_headers' => bless( {
                                        'connection' => 'close',
                                        'x-powered-by' => 'PHP/5.2.14',
                                        'client-response-num' => 1,
                                        'location' => 'http://www.portalhacker.net/index.php?PHPSESSID=ded1aaea5d1c7ed43e760f4531aff959;action=login2;sa=check;member=91147',
                                        'cache-control' => 'private',
                                        'set-cookie' => [
                                                          'PHPSESSID=5dcdc80181de5b4db8ca143378f31afc; path=/; domain=.portalhacker.net',
                                                          'Cphcookies=a%3A4%3A%7Bi%3A0%3Bs%3A5%3A%2291147%22%3Bi%3A1%3Bs%3A40%3A%2299e1dff4dc1c583fa3cf5b2ed9b873219c431c87%22%
                                                          'PHPSESSID=8a9d107fbf7fb566b28ffb152bae71df; path=/; domain=.portalhacker.net',
                                                          'PHPSESSID=ded1aaea5d1c7ed43e760f4531aff959; path=/; domain=.portalhacker.net'
                                                        ],
                                        'date' => 'Wed, 05 Dec 2012 22:43:02 GMT',
                                        'client-peer' => '63.246.133.74:80',
                                        'content-length' => '0',
                                        'client-date' => 'Wed, 05 Dec 2012 22:43:03 GMT',
                                        'content-type' => 'text/html',
                                        'pragma' => 'no-cache',
                                        'server' => 'Apache',
                                        'expires' => 'Thu, 19 Nov 1981 08:52:00 GMT'
                                      }, 'HTTP::Headers' ),
                 '_msg' => 'Found',
                 '_request' => bless( {
                                        '_content' => 'cookielength=60&passwrd=test&submit=Ingresar&user=test&hash_passwrd=',
                                        '_uri' => bless( do{\(my $o = 'http://www.portalhacker.net/index.php?action=login2')}, 'URI::http' ),
                                        '_headers' => bless( {
                                                               'user-agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12',
                                                               'content-type' => 'application/x-www-form-urlencoded',
                                                               'content-length' => 68
                                                             }, 'HTTP::Headers' ),
                                        '_method' => 'POST',
                                        '_uri_canonical' => $VAR1->{'_request'}{'_uri'}
                                      }, 'HTTP::Request' )
               }, 'HTTP::Response' );
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


en donde vemos que ha insertado una variable de sesión (PHPSESSID).

Curiosamente, nos envían, no una, sino TRES cookies iguales en nombre (PHPSESSID), pero de contenido distinto (¿quién ha hecho esta página?) y ni siquiera coinciden con la que nos dan en la URL... ¡Vaya desastre!

Entonces... hay que modificar el programa para que lea esa nueva URL, e intentar entrar de nuevo.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($final->is_redirect) {
  2.     print $final->header('location'), "\n";
  3. }
  4. elsif ($final->is_success) {
  5.     print $final->as_string, "\n";
  6. }
  7. else {
  8.     print STDERR $final->status_line, "\n";
  9. }
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

Re: Duda con formulario

Notapor BigBear » 2012-12-06 14:10 @632

Eso explica muchas cosas :D

Pero tengo otra duda con una expresión regular porque quiero sacar todo los subforos de un foro para después mostrarlos por pantalla.

Intenté con esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while($code=~/<strong>Subforos<\/strong>: <strong><a href="(.*)" class="new_posts" title="(.*)">(.*)<\/a> <a href="(.*)" title="(.*)"><img src="(.*)" class="new_posts" alt=""><\/a><\/strong>/mig) {
  2. print $2."\n";
  3. }
  4.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


pero nada, acá te dejo el texto del problema.

Sintáxis: [ Descargar ] [ Ocultar ]
Using html4strict Syntax Highlighting
  1. <strong>Subforos</strong>: <a href="http://www.portalhacker.net/index.php/board,6.0.html" title="No hay nuevos Mensajes (Temas: 5,502, Mensajes: 17,430)">Noticias de la red</a>, <strong><a href="http://www.portalhacker.net/index.php/board,9.0.html" class="new_posts" title="Nuevos Mensajes (Temas: 1,539, Mensajes: 40,426)">Off Topic</a>
  2.  
  3.  
  4. <strong>Subforos</strong>: <a href="http://www.portalhacker.net/index.php/board,113.0.html" title="No hay nuevos Mensajes (Temas: 257, Mensajes: 950)">Código Abierto Python</a>
  5.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Mi idea es sacar el nombre y el enlace del tablero de cada uno.

¿ Cómo puedo mejorar mi expresión regular ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Duda con formulario

Notapor explorer » 2012-12-06 16:51 @743

Creo que esos foros usan el software de PHPbb, y en CPAN hay unos cuántos módulos que facilitan la extracción y publicación de mensajes.
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: Duda con formulario

Notapor BigBear » 2012-12-07 13:09 @590

En realidad es SMF y al parecer no encontré módulos en CPAN para SMF, así que lo dejo terminado así. Lo publico en la sección de proyectos de este foro.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron