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.
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...
Using perl Syntax Highlighting
- #!/usr/bin/perl
- use strict;
- use threads;
- use LWP::UserAgent;
- use HTTP::Request;
- use threads::shared;
- my $bloqueo : shared = 0;
- my @vector : shared="";
- system('cls');
- my ($URL1,$idvotacion,$min,$max,$id,$hilo);
- $idvotacion = "5425f16ae4b088456e71e524";
- $URL1 = "http://www.mipagina.net/poll?command=getPoll&pollId=".$idvotacion;
- $hilo = " Hilo A ";
- print "\n";
- print " INICIANDO LOS HILOS ";
- print "FECHA Y HORA ";print scalar(localtime),"\n";
- print "\n";
- 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
- 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
- $h1->join();
- $h2->join();
- print "\n";
- print " FIN DE LOS HILOS ";
- print "FECHA Y HORA ";print scalar(localtime),"\n";
- print "\n";
- sub Obtener_PollKey
- {
- my ($url,$min,$max,$id,$hilo) = @_;
- for ($min; $min < $max ; $min++ ) {
- my $ua = LWP::UserAgent->new;
- $ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
- my $req = HTTP::Request->new(GET => $url);
- my $response = $ua->request($req);
- my $content = $response->content();
- my $status = $response->code();
- if ($content =~ /(\"pollKey\":\")(.+)*$\"\,\"(a)/)
- {
- #print $2."\n";
- &Votar($2,$id,$hilo,$min);
- }
- }
- }
- sub Votar
- {
- my ($idv,$key,$hilo,$i) = @_;
- 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");
- my $aleatorio = int(rand(29));
- my $URL3 = "http://www.mipagina.net/poll?multResp=2&pollId=".$key."&pollKey=".$idv."&command=saveResponse";
- my $control="";
- my $c = 0;
- while ($control = 200 && $c = 8) {
- my $ua = LWP::UserAgent->new;
- $ua->proxy('http','http://'.$proxy[$aleatorio]);
- $ua->timeout(20);
- $ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0");
- my $req = HTTP::Request->new(GET => $URL3);
- my $response = $ua->request($req);
- my $content = $response->content();
- my $status = $response->code();
- print "\n";
- print "[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]";
- print "\n";
- print "Hilo : " .$hilo; print "\n";
- print "Número: " .$i; print "\n";
- print "[PROXY SELECCIONADO ] ".$proxy[$aleatorio];print "\n";
- print "[LLAVE ] ".$idv;print "\n";
- print "[URL VOTO ] ".$URL3;print "\n";
- print "[RESULTADO ] ".$content;print "\n";
- print "[codigo respuesta ] ".$status;print "\n";
- $control = $status;
- $c = $c + 1;
- }
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4