• Publicidad

Envío de hash con método POST

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

Re: Envío de hash con método POST

Notapor BigBear » 2011-06-21 11:46 @532

Si ahora le pregunté un ejemplo a explorer de cómo usar los arrays para el tema de los datos. Sé que con Mechanize lo soluciono y evito usar formularios , pero mantengo una filosofía rara y poco práctica de aprender paso a paso como son las cosas , por eso no usé Mechanize para poder entender cómo listar formularios y usas cosas sabiendo que Mechanize resume considerablemente el código.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Envío de hash con método POST

Notapor explorer » 2011-06-21 12:16 @553

En vez de

@valores = ("nombre/test","submit/boton");

sería

@valores = ('nombre', 'test', 'submit', 'boton');

Es decir: vas agregando nombre/valor como elementos individuales al array.

También lo puedes escribir así, al utilizar la coma "gorda":

@valores = ('nombre' => 'test', 'submit' => 'boton');

Es igual que antes, pero más "visual".

En forma de hash queda aún mejor escrito:

%valores = ('nombre' => 'test', 'submit' => 'boton');
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: Envío de hash con método POST

Notapor BigBear » 2011-06-21 12:31 @563

Gracias por la ayuda, tengo una duda fuera del tema, quería saber si puede pasar que en un formulario se repita un input con el mismo nombre y valor. Quería saber para ver si es necesario hacer una función que lo detecte.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Envío de hash con método POST

Notapor explorer » 2011-06-21 13:06 @588

Sí que se puede pasar, pero, depende del programa que lo reciba, o solo tratará el primero que encuentre, o el último, o los dos. No hay garantía, porque el estándar dice que solo se debe pasar un valor por cada input, salvo los de tipo de selección múltiple.
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: Envío de hash con método POST

Notapor BigBear » 2011-06-21 13:11 @591

Pero que desgracia, explorer. Me quedó este código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/bin/perl
  2.  
  3. use LWP::UserAgent;
  4. use HTML::Form;
  5.  
  6. my $nave = LWP::UserAgent->new;
  7. $nave->agent(
  8.     "Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8.1.12) Gecko/20080201Firefox/2.0.0.12"
  9. );
  10. $nave->timeout(5);
  11.  
  12. scan("http://localhost/post.php");
  13.  
  14. #scan("http://localhost/test/a.php");
  15.  
  16. sub scan {
  17.  
  18.     my $page = shift;
  19.  
  20.     my @strings = ( "yeah", "fuck" );
  21.     my @testar = HTML::Form->parse( toma($page), "/" );
  22.     my @botones_names;
  23.     my @botones_values;
  24.     my @orden;
  25.  
  26.     my $valor = "doddyhackman";
  27.  
  28.     for my $test (@testar) {
  29.         if ( $test->method eq "POST" ) {
  30.             my @inputs = $test->inputs;
  31.             for my $in (@inputs) {
  32.                 if ( $in->type eq "submit" ) {
  33.                     if ( $in->name eq "" ) {
  34.                         push( @botones_names, "submit" );
  35.                     }
  36.                     push( @botones_names,  $in->name );
  37.                     push( @botones_values, $in->value );
  38.                 }
  39.                 else {
  40.                     push( @orden, '"' . $in->name . '" => "' . $valor . '"' );
  41.                 }
  42.             }
  43.  
  44.             for my $n ( 0 .. int(@botones_names) - 1 ) {
  45.                 my @pre = @orden;
  46.                 push( @pre,
  47.                           '"'
  48.                         . $botones_names[$n]
  49.                         . '" => "'
  50.                         . $botones_values[$n]
  51.                         . '"' );
  52.                 print "\n";
  53.                 for (@pre) {
  54.                     print $_. "\n";
  55.                 }
  56.                 print $nave->post( $page, \@pre )->content;
  57.             }
  58.         }
  59.         else {                         #Fin de metodo POST
  60.  
  61.             my @inputs = $test->inputs;
  62.             for my $in (@inputs) {
  63.                 if ( $in->type eq "submit" ) {
  64.                     if ( $in->name eq "" ) {
  65.                         push( @botones_names, "submit" );
  66.                     }
  67.                     push( @botones_names,  $in->name );
  68.                     push( @botones_values, $in->value );
  69.                 }
  70.                 else {
  71.  
  72.                     #$orden.=''.$in->name.'='.$valor.'&';
  73.                 }
  74.             }
  75.             chop($orden);
  76.             for my $n ( 0 .. int(@botones_names) - 1 ) {
  77.                 my $partedos
  78.                     = "&" . $botones_names[$n] . "=" . $botones_values[$n];
  79.                 my $final = $orden . $partedos;
  80.                 for my $strin (@strings) {
  81.                     $final =~ s/doddyhackman/$strin/;
  82.                     print $page. "?" . $final . "\n";
  83.                 }
  84.  
  85.             }
  86.         }                              # Fin de metodo GET agregar ?
  87.     }                                  #Fin de bucle principal
  88.  
  89.     #{"query" => $_[0], "submit" => " Crack "}
  90.  
  91. }                                      # Fin de scan
  92.  
  93. sub reemplazararray {
  94.     my @resultado;
  95.     my @cambiares = ( "fuck", "this" );
  96.     for (@_) {
  97.         my $word = $_;
  98.         for my $c (@cambiares) {
  99.             chomp $c;
  100.             my $copia = $word;
  101.             if ( $copia =~ /doddyhackman/ ) {
  102.                 $copia =~ s/doddyhackman/$c/;
  103.                 push( @resultado, $copia );
  104.             }
  105.             else {
  106.                 push( @resultado, $copia );
  107.             }
  108.         }
  109.     }
  110.     return repes(@resultado);
  111. }
  112.  
  113. sub repes {
  114.     foreach my $palabra (@_) {
  115.         next if $repety{$palabra}++;
  116.         push @revisado, $palabra;
  117.     }
  118.     return @revisado;
  119. }
  120.  
  121. sub toma {
  122.     return $nave->get( $_[0] )->content;
  123. }
  124.  
  125. # ¿ The End ?
  126.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4


El problema es que no se responde bien los formularios

El código del formulario es este

Sintáxis: [ Descargar ] [ Ocultar ]
Using php Syntax Highlighting
  1. <form action='' method=POST>
  2. <input type=text name=probar value=test>
  3. <input type=submit name=con value=forear>
  4. </form>
  5. <br><br>
  6.  
  7. <?php
  8. if (isset($_POST['con'])) {
  9. echo $_POST['probar']."<br>";
  10. }
  11. ?>
Coloreado en 0.020 segundos, usando GeSHi 1.0.8.4


¿ Cuál es el error ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Re: Envío de hash con método POST

Notapor explorer » 2011-06-21 14:13 @634

No acabas de entenderlo... sigues creando el contenido de las variables como cadenas de caracteres.

Deberías usar el módulo Data::Dumper, para que te muestre el contenido de las variables que estás creando.

Por ejemplo, ¿qué sentido tiene la línea 40? ¿Por qué guardas en @orden un solo valor, que tiene la forma

"$in->name => $valor"

? (Observa que estás guardando los caracteres '=' y '>' junto con el nombre y valor, y todo ello, como una cadena de caracteres, que no es lo que espera el método post().)

Lo que se te ha dicho es que guardes la pareja nombre/valor como dos elementos:

push @orden, $in->name, $valor;

Lo mismo para el resto de arrays.

De forma correcta, pasas \@pre, como referencia, como segundo argumento de post(). Pero no creo que @pre contenga la información correcta. Usa el módulo Data::Dumper para ver su contenido.

Y tampoco sé dónde has visto que el resultado del método post() es un objeto al que puedes aplicar el método content().

¡Ánimo! que te queda muy poco... :)
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: Envío de hash con método POST

Notapor BigBear » 2011-06-21 14:25 @642

Al fin :P

Ya lo logré. Sí había entendido, solo lo apliqué mal, muy mal, es diferente :D

Gracias, explorer, por tu eterna paciencia y a kidd por crear este foro.
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Anterior

Volver a Básico

¿Quién está conectado?

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