• Publicidad

Hilos y peticiones HTTP

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Hilos y peticiones HTTP

Notapor jimr1984 » 2014-10-03 14:28 @644

Buenas tardes, comunidad. Tengo el siguiente script para solucionar un problema. Si pueden ayudarme, por favor.

Problemática: es un sistema de votación. Ejemplo: ¿Está de acuerdo en que Perl es un lenguaje potente? "sí", "no".

El cual tiene dos opciones ("sí","no") Este sistema permite realizar dieciséis votos, es decir, ocho síes y ocho noes para una IP. Luego de realizar los dieciséis votos u ocho votos de su elección, la dirección IP es bloqueada por un por tiempo de quince minutos.
Recién se habilita para volver a votar.

Solución planteada: para el tema de el bloqueo por IP se optó por recurrir a listas de proxies. De esta manera, mientras más proxies válidos se tengan, más cantidades de votos se podrán realizar de forma automatizada.

Si tengo cien proxies, por ocho votos "sí" o "no", salen ochocientos votos reflejados en cualquiera de las opciones.

Después de varias consultas y otros mensajes en el foro, se procedió armar el script, pero aún tengo el problema.

A considerar:
  • NO importa con cuántos hilos se trabajen; pueden ser dos, tres, cuatro, cinco o seis hilos; eso es a elegir
  • se debe comprobar que el proxy seleccionado es válido, con un timeout u otro medio
  • se debe restringir que el mismo proxy no se utilice en otros hilos
  • cada hilo debe realizar ocho votos; así, si tenemos cinco hilos sería cuarenta votos.
Otra posible solución: trabajar con dos hilos.

Que el primer hilo verifique un proxy válido; luego, que el segundo hilo realice ocho votos con el proxy elegido... en un ciclo.

Favor, si pueden revisar mi código y ayudarme a corregirlo

MUCHAS GRACIAS...

Aguardo sus comentarios. Saludos...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use strict;
  4. use threads;
  5. use LWP::UserAgent;
  6. use HTTP::Request;
  7. use threads::shared;
  8.  
  9. my $bloqueo : shared = 0;
  10. my @vector : shared="";
  11. system('cls');
  12.  
  13. my ($URL1,$idvotacion,$min,$max,$id,$hilo);
  14.  
  15. $idvotacion = "5425f16ae4b088456e71e524";
  16. $URL1 = "http://www.mipagina.net/poll?command=getPoll&pollId=".$idvotacion;
  17. $hilo = " Hilo A ";
  18.  
  19.  
  20. print "\n";
  21. print " INICIANDO LOS HILOS  ";
  22. print "FECHA Y HORA ";print scalar(localtime),"\n";
  23. print "\n";
  24.  
  25.  
  26.  
  27. my $h1 = threads->create('Obtener_PollKey',$URL1,1,8,$idvotacion,$hilo); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia my
  28. my $h2 = threads->create('Obtener_PollKey',$URL1,1,8,$idvotacion,"Hilo B"); #Cuenta de 1 al 5 #Se crea el thread pero no se guarda la referencia my
  29.  
  30. $h1->join();
  31. $h2->join();
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40. print "\n";
  41. print " FIN DE LOS HILOS  ";
  42. print "FECHA Y HORA ";print scalar(localtime),"\n";
  43. print "\n";
  44.  
  45. sub Obtener_PollKey  
  46. {
  47.    my ($url,$min,$max,$id,$hilo) = @_;
  48.  
  49.    for ($min; $min < $max ; $min++ ) {
  50.    my $ua = LWP::UserAgent->new;
  51.  
  52.    $ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
  53.    my $req = HTTP::Request->new(GET => $url);
  54.  
  55.    my $response = $ua->request($req);
  56.    my $content = $response->content();
  57.    my $status  = $response->code();
  58.    if ($content =~ /(\"pollKey\":\")(.+)*$\"\,\"(a)/)
  59.       {
  60.        
  61.        #print $2."\n";
  62.            &Votar($2,$id,$hilo,$min);
  63.                
  64.       }
  65.    
  66.   }
  67.  
  68.  
  69.  
  70. }
  71.  
  72. sub Votar
  73. {
  74.  
  75. my ($idv,$key,$hilo,$i) = @_;
  76. my  @proxy = ("184.168.55.226:80","113.201.63.12:80","194.247.12.11:7920","190.167.243.11:8080","200.47.142.202:8080","202.143.122.66:8080","190.38.77.126:8080","190.38.77.126:8080","125.214.163.2:8080","125.39.66.66:80","41.210.55.157:8080","200.10.67.162:8080","218.203.13.176:80","49.236.205.190:8080","187.113.172.125:8080","187.114.208.43:8080","186.214.248.96:8080","187.63.226.185:8080","202.71.128.253:8080","217.11.225.138:80","217.11.255.66:80","213.8.213.0:80","77.232.75.5:80","202.150.168.178:80","62.119.28.242:80","78.224.128.22:80","60.28.209.8:80","201.229.208.2:80","163.30.32.90:80");
  77. my $aleatorio = int(rand(29));
  78. my $URL3 = "http://www.mipagina.net/poll?multResp=2&pollId=".$key."&pollKey=".$idv."&command=saveResponse";
  79. my $control="";
  80. my $c = 0;
  81.  
  82.  
  83.    while ($control = 200 && $c = 8)  {
  84.    my $ua = LWP::UserAgent->new;
  85.    $ua->proxy('http','http://'.$proxy[$aleatorio]);
  86.    $ua->timeout(20);
  87.    $ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
  88.      
  89.    my $req = HTTP::Request->new(GET => $URL3);
  90.    my $response = $ua->request($req);
  91.    my $content = $response->content();
  92.     my $status  = $response->code();
  93.    
  94.    print "\n";
  95.    print "[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]";
  96.    print "\n";
  97.    print "Hilo : " .$hilo; print "\n";
  98.    print "Número: " .$i; print "\n";
  99.    print "[PROXY SELECCIONADO ] ".$proxy[$aleatorio];print "\n";
  100.    print "[LLAVE ] ".$idv;print "\n";
  101.    print "[URL VOTO ] ".$URL3;print "\n";
  102.    print "[RESULTADO ] ".$content;print "\n";
  103.    print "[codigo respuesta ] ".$status;print "\n";
  104.    
  105.    $control = $status;
  106.    $c = $c + 1;
  107.    }
  108.  
  109.  
  110.  
  111. }
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Última edición por explorer el 2014-10-03 19:09 @840, editado 3 veces en total
Razón: sgt => siguiente; Problematica => Problemática; votacion => votación; Esta => Está; si => sí; eleccion => elección; direccion => dirección; baneada => bloqueada; x => por; recien => Recién; Solucion => Solución; banneo =
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Re: Hilos y peticiones HTTP

Notapor explorer » 2014-10-03 19:16 @844

Atención a los programadores españoles que estén leyendo este hilo: participar en esta discusión puede acarrearles problemas legales, ya que en España es delito la programación/uso de sistemas de fraude de voto.

En México y Colombia, también.
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: Hilos y peticiones HTTP

Notapor jimr1984 » 2014-10-04 13:09 @589

Entiendo que esto pueda ser o parecer un delito o pueda ser visto como tal, pero lo que pido es la ayuda sobre el ejemplo, no sobre un objetivo (no hay una URL, ni objetivo específico).

Si gustan podemos cambiar los parámetros... pero el hilo seguirá manteniendo la misma lógica.
De todas maneras agradezco cualquier ayuda que se pueda brindar.

Saludos.
Última edición por explorer el 2014-10-04 15:08 @672, editado 1 vez en total
Razón: especifico => específico; parametros => parámetros; seguira => seguirá; logica => lógica;
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Hilos y peticiones HTTP

Notapor danimera » 2014-10-05 08:35 @399

¡jajaja! Yo no sabía que es mi país Colombia eso fuera ilegal... Pero mejor porque no colocar eso como un sistema de encuestas y ya. Yo no creo que las encuestas estén prohibidas. Y espero no tener problemas legales, jejeje.

:D
Última edición por explorer el 2014-10-05 09:55 @454, editado 1 vez en total
Razón: sabia => sabía; pais => país;
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Re: Hilos y peticiones HTTP

Notapor explorer » 2014-10-05 09:58 @457

No, hacer encuestas no es ilegal.

Rellenarlas de forma automática, si es personal, tampoco, porque se supone entonces que eres tú el que está votando de una forma especial.

Lo que sí es delito es votar de forma masiva, saltando las medidas de seguridad, como en el ejemplo, el límite de votos por IP.
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: Hilos y peticiones HTTP

Notapor jimr1984 » 2014-12-08 11:53 @537

Entendido, estimado.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Hilos y peticiones HTTP

Notapor jimr1984 » 2017-06-01 17:40 @777

Por favor, ¿pueden recomendarme o darme algún ejemplo de hilos con el cual pueda realizar las siguientes acciones?

Proceso:

proceso1 visita URL(ABC) y muestra el response 200 OK
proceso2 visita URL(DEF) y muestra el response 200 OK


y así pueden existir N procesos visitando N URL.

Los procesos NO interactúan entre sí ni intercambian información.

El próximo caso que necesito es:

proceso1 visita URL(ABC) obtiene respuesta (procesa la respuesta) y la envía como entrada del proceso2
proceso2 recibe entrada del proceso1 y visita URL utilizando la información recibida.


Si alguien pueda darme un ejemplo, algo que pueda ayudarme a realizar los ejemplos para comprender, por favor.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Hilos y peticiones HTTP

Notapor explorer » 2017-06-02 16:13 @717

Hay módulos para hacer peticiones en paralelo, como el caso de LWP::Parallel (que, por debajo, usa LWP::Parallel::UserAgent y LWP::Parallel::RobotUA).

Para el segundo caso, es mejor usar el comando open(), usando el operador tubería '|', para "entubar" la salida de un proceso con la entrada del siguiente. No sé si es esto lo que quieres hacer. El segundo proceso quedaría parado a la espera de recibir la salida del primero.

En el documento perldoc perlipc, en la sección Using open() for IPC aparecen ejemplos de ese tipo de encadenamiento. También en la sección Safe Pipe Opens. También hay ejemplos en perldoc -f open.
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: Hilos y peticiones HTTP

Notapor jimr1984 » 2017-06-05 10:55 @496

Muchas gracias. Voy a leer lo indicado.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341


Volver a Web

¿Quién está conectado?

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