Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Automatizar la votación en un sistema de votaciones en línea (https://www.clubdelphi.com/foros/showthread.php?t=44138)

imossa 29-05-2007 18:22:30

Automatizar la votación en un sistema de votaciones en línea
 
Bueno, saludos otra vez.
Me imagino que todos conocéis las típicas páginas con links para emitir votos que se computan en una lista de "popularidad", hay juegos, foros, portales, etc... con este tipo de links.
Mi pregunta es si, con Delphi se puede generar algún proceso que, emita todos los días un voto a un link determinado.
La gestión de lanzamiento lo tengo claro, sólo necesitaría saber es, de qué manera puedo ejecutar el link y su código para que se registre ese voto.
He visto que, cuando accedo al link, se genera un id único cada vez, que está oculto (sólo se ve al editar el html que muestra el navegado)
Gracias por vuestra ayuda, y felicidades por el alto nivel que se alcanza en estos foros.

dec 29-05-2007 18:27:06

Hola,

Me atrevería a decir que si lo han hecho bien, será imposible (o nada trivial) duplicar el voto, o mejor dicho "automatizar" el voto de modo que puedas votar varias veces. Claro que quien hace la ley hace la trampa, pero, sin más datos para mí tengo que no será sencillo intentar ayudarte. Y luego está el que pides ayuda para "jorobar" un sistema de votos... probablemente para beneficio propio... No sé, no sé...

PD. Voy a editar el título del Hilo, puesto que "Dudas en la Web" no parece muy apropiado. Revisa la guía de estilo para más información.

imossa 29-05-2007 18:33:31

Bueno, no se trata de nada ilegar (al menos no pienso en jorobar nada), simplemente, yo todos los días voto en una página, a través de un link, y simplemente quería hacer un proceso automático para no tener que cliclar.
Con eso, pensaba más que en hacer algo ilegal, hacer algo para mi comodidad:D.
No deseo duplicar el voto, además no creo que eso se puediera hacer. Símplemente, es por facilitarme la vida, ya que todos los días, hago la operación a mano.
Ahora, si eso va en contra de alguna lei, entiendo que, en caso de tener el conocimiento no queráis compartirlo jejeje.;)
Gracias de todas formas.
Lo que si puedo decir que a simple vista, el link accede a una página web con un formulario y un botón.

dec 29-05-2007 18:38:12

Hola,

Pues, para empezar... me temo que tendrías que referir de qué página Web estamos hablando. Creo que sería preciso. Y, por otro lado, en lo que respecta a si es "legal" o no (entendiendo esta palabra sólo como si está bien o parece bien hacer lo que se quiere hacer), personalmente, imagino que quien sea querrá votos "humanos", y no de algún "programa robot". A esto más bien me refería.

Pero, no puedo negar que, por otro lado, si permiten votar una vez al día... lo cierto es que no estarías sino automatizando esa tarea: siempre que no trataras de votar más de una vez al día (si esa es la restricción) pues tampoco parece que quieras hacer nada malo. Al fin y al cabo tú estarías votando, aunque lo hicieras a través de un programa.

Ahora bien, como digo, habría que empezar por saber qué es lo que hay que superar... de qué Web estamos hablando.

PD. Si no quieres decir el sitio Web de que se trata... tal vez puedas describir el problema un poco más detalladamente, o, en todo caso, siempre querrás revisar este Hilo: Automatización Web (HTTP sin navegador).

imossa 29-05-2007 18:46:25

El link al que hago click tiene esta información:

http://l2.hopzone.net/vote.php?site=60199

y carga una página con este código:

Código PHP:

<script type="text/javascript" src"tools/flashobject.js"></script><HTML>
         <HEAD>
         <meta name="robots" content="all">
         <meta name="description" content="Top Mmorpg ,servers, sites, games, music, celebrities, and more.">
         <meta name="keywords" content="top list, sites, sites links, top web sites, toplists, top lists, top list web directory, the best sites, webdirectory search engines, searchengines portals, free internet community, send postcards, free traffic, free webpromotion, linkexchange, link exchange programs, webmaster community, webmaster affiliate programs, computers free, cliparts, clip arts, desktop themes, free games, free screensavers, free wallpapers, internet chat, cool sites, personal homepages, webmasters animals, crafts movies, free mp3 music, free cash, freestuff, free stuff greetingcards, shopping women ,business, free gsm telecom, free webhosting, free magazines, cars, celebrity, celebrities, free contests, dogs education, finance, free fonts, freeware, free graphics, health horoscopes, jobs, jokes ,free marketing, midi, pets, free phones, free, free software, free themes, top websites, top sites, travel free, videogames, webcams, webdesign, webhosting, entertainment">
         <meta name="revisit-after" content="1 days">
     <title>Welcome to HopZone.Net Voting page</title>
         <link href="styles.css" rel="stylesheet" type="text/css">
    <script language="JavaScript">
    <!--
    if (parent.frames.length > 0)
    {
    parent.location.href = location.href;
    }
    -->
    </script>
    <style type="text/css">
<!--
.vote-button {
    font-family: Tahoma;
    font-size: 12px;
    font-weight: normal;
    color: #000033;
    text-decoration: none;
    padding: 4px;
}
-->
</style>

         </HEAD>
    <body bgcolor="#EEF0FF">
    <div align="center">
      <table width="800" border="0" cellpadding="0" cellspacing="0" class="tabele-mici">
        <tr>
          <td height="23"><div align="center"><img src="images/header.jpg" width="800" height="82"></div></td>
        </tr>
      </table>
      <br>
      <table width="800" border="0" align="center" cellpadding="5" cellspacing="0" class="tabel-mijloc">
        <tr>
          <td height="23" class="text-in-site"><div align="center"><strong><font size="5">
        LINEAGE  2 TOPLIST + SERVER STATUS + COMMENTS</font></strong></div></td>
        </tr>
      </table>
      <br>
<form name="gogo" method="POST" action="regvote.php">
<table width="68%" height="106" border="0" align="center" cellpadding="3" cellspacing="0" class="tabel-mijloc">
              <tr>
                <td height="106" class="text-in-site"><div align="center">

                    <p> <font color="#333399">
                      </font>
                  <INPUT TYPE="HIDDEN" NAME="30" VALUE="60199">


                      <input type="submit" class="vote-button" name="gogogo" value="VOTE FOR Insomnyo Server"><br><br>
                    </p>
                  </div></td>
              </tr>
            </table>
</form>

      <p><span class="text-in-site"><a href="http://l2.hopzone.net/">[Click here if you don't want to Vote]</a></span></p>
      <p>


</p>
  <p><span class="text-in-site"><br>
    <a href="index.php">HopZone.Net</a> &copy; 2000-2005<br>
    </span></p>
  </div>
</body>
</html> 

Se podría hacer algo?
muchas gracias.
Edito: mis conocimientos de html y similar son muy bajos, ya que me dedico al desarrollo de aplicaciones generalmente para sistemas industriales con sistemas operativos propietarios, y suelos hacerlos en C o Basic. Delphi lo uso como apoyo para traspasos de ficheros y comunicaciones y cosas similares.... pero veo que hay un input type oculto con un dato que varia cada vez que accedo a la página.

imossa 29-05-2007 19:00:18

Efectivamente, entiendo tu aclaración de "legalidad"....:(
Bueno, sólo prentendo hacer... lo que tantas veces me han explicado: automatizar una tarea que ejecuto todos los dias.
Me imagino que para el registro de votos se tendrá encuenta la ip que envía el voto o similar para gestionar que no se pude votar más de una vez.... no se...
En cuanto al origen, bueno, el que pone el link en su página, me imagino que estará más preocupador por recoger votos que por saber si ha habido intervención humana en la recogida del voto. Son listas de popularidad nada más, con lo que cuantos más arriba aparezcas, más posibles usuarios se podrán conseguir.
Ya me contarás cuando si lo ves bien, o mal, y si se puede hacer algo.
Gracias.

seoane 29-05-2007 19:09:38

Pues no me parece muy complicado, a simple vista el método de votación parece mas simple que el mecanismo de un chupete :p , habrá que ver como lo maneja internamente.

Supongo que ya has leído el hilo sobre Automatización web. Si lo has hecho y tienes claro como comunicarse con la pagina web lo demás no parece difícil.

Primero accederiamos a la pagina que contiene el boton y nos fijariamos en esta parte:
Código PHP:

<INPUT TYPE="HIDDEN" NAME="31" VALUE="60199"

Parece que "value" es un valor fijo, que seguramente identifica a quien se quiere votar, mientras que "name" tiene un valor variable. Pues bien solo tendríamos que obtener ese valor y simular un POST.

Como ya dije, a simple vista no parece que se implementen mas protecciones. Intentalo y nos cuentas ...

dec 29-05-2007 19:12:45

Hola,

Yo me he quedado en "dónde" hacer el "POST", puesto que no he podido encontrar un "regvote.php válido"...

imossa 29-05-2007 19:16:32

Efectivamente, esta idea me ha surgido de otra que me hizo leer esos hilos.
De hecho intenté con el código que vi, simular o lanzar el post, pasándole lo datos, pero, claro, el tema es que uno de los datos lo genera el programa.
Entonces, pensé en, hacer un get y recoger el fuente en un stream, revisarlo para extraer los datos hidden que me ofrecía y hacer un post con ellos, pero, tampoco funcionó....
No obstante y como ya tengo la mente limpia de lo otro que estaba haciendo, voy a repetir toda la jugada y te comento los resultados, ya que si me diriges a ese hilo es porque debe ser el camino más fácil para hacer lo que me propongo.
Gracias por el tiempo que le has dedicado.

seoane 29-05-2007 19:22:38

Cita:

Empezado por dec
Yo me he quedado en "dónde" hacer el "POST", puesto que no he podido encontrar un "regvote.php válido"...

El truco amigo dec puede ser en el header referer de la petición, creo que este debe contener la dirección de la pagina donde se encuentra el botón.

dec 29-05-2007 19:45:53

Hola,

Bueno. Yo he tratado de hacer un "post" al Script en cuestión... y obtengo el 404... Por otro lado he localizado un "regvote.php" otra URL de la misma Web (ahora no recuerdo el dominio), pero, sin resultados.... es decir, no funcionaba el "post", pero ya no sabe uno si porque no incluyó los parámetros adecuados, si porque no se trata del mismo "regvote.php"...

Cita:

Empezado por Seoane
El truco amigo dec puede ser en el header referer de la petición, creo que este debe contener la dirección de la pagina donde se encuentra el botón.

Pues... chico, no sé, puede ser, sí. :) Por mi parte le dejo al compañero comprobarlo. ¡Yo ya le he votado hoy! :D

seoane 29-05-2007 19:59:44

Esto es todo lo que voy a dedicar a este asunto, espero que te sirva. Yo no lo puedo comprobar porque ahora ya ni me deja entrar a la pagina de votación, me dice que ese servidor esta offline y que no puedo votar por el :confused:

Es una aplicación de consola.
Código Delphi [-]
program Voto;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, WinInet, Classes;

function URLEncode(Str: string): string;
var
  i: integer;
begin
  Result:= '';
  for i:= 1 to Length(Str) do
    if Str[i] in ['A'..'Z','a'..'z','0'..'9','-','_','.'] then
      Result:= Result + Str[ i ]
    else
      Result:= Result + '%' + IntToHex(Ord(Str[ i ]),2);
end;

function SendRequest(Server, Uri: string; Port: Word; Params: TStringList;
  Response: TStream): Boolean;
var
  hNet: HINTERNET;
  hCon: HINTERNET;
  hReq: HINTERNET;
  Context: DWORD;
  Buffer: array[0..10240] of Char;
  BytesRead: DWORD;
  i: integer;
  Str: String;
  Success: Boolean;
begin
  Context:= 0;
  Result := FALSE;
  hNet := InternetOpen('Agente', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if (hNet <> nil) then
  begin
    hCon:= InternetConnect(hNet,PChar(Server),Port,nil,nil,
      INTERNET_SERVICE_HTTP,0,Context);
    if (hCon <> nil) then
    begin
      if Params <> nil then
        hReq:= HttpOpenRequest(hCon,'POST',PChar(Uri),nil,nil,nil,
          INTERNET_FLAG_RELOAD,Context)
      else
        hReq:= HttpOpenRequest(hCon,'GET',PChar(Uri),nil,nil,nil,
          INTERNET_FLAG_RELOAD,Context);
      if (hReq <> nil) then
      begin
        if Params <> nil then
        begin
          Str:= Emptystr;
          for i:= 0 to Params.Count - 1 do
            Str:= Str + '&' + URLEncode(Params.Names[i]) + '=' +
              URLEncode(Params.ValueFromIndex[i]);
          Delete(Str,1,1);
          Success:= HttpSendRequest(hReq,
           'Content-Type: application/x-www-form-urlencoded',Cardinal(-1),
            PChar(Str),Length(Str));
        end else
          Success:= HttpSendRequest(hReq,nil,0,nil,0);
        if Success and (Response <> nil) then
        try
          while (InternetReadFile(hReq,@Buffer,sizeof(Buffer),BytesRead)) do
          begin
            if (BytesRead = 0) then
            begin
              Result := TRUE;
              break;
            end;
            Response.Write(Buffer,BytesRead);
          end;
        except end;
        InternetCloseHandle(hReq);
      end;
      InternetCloseHandle(hCon);
    end;
    InternetCloseHandle(hNet);
  end;
end;

procedure Votar;
var
  Campos: TStringlist;
  Respuesta: TStringStream;
  Str: String;
begin
  Campos:= TStringList.Create;
  Respuesta:= TStringStream.Create('');
  try
    if SendRequest('l2.hopzone.net','/vote.php?site=60199',80,nil,Respuesta) then
    begin
      if Pos('<INPUT TYPE="HIDDEN" NAME="',Respuesta.DataString) > 0 then
      begin
        Str:= Respuesta.DataString;
        Respuesta.Size:= 0;
        Delete(Str,1,Pos('<INPUT TYPE="HIDDEN" NAME="',Respuesta.DataString)+
          Length('<INPUT TYPE="HIDDEN" NAME="') - 1);
        Delete(Str,Pos('"',Str),MAXINT);
        Campos.Values[Str]:= '60199';
        Campos.Values['gogogo']:= 'VOTE FOR Insomnyo Server';
        if SendRequest('l2.hopzone.net','/regvote.php',80,nil,
          Respuesta) then
        begin
          // Aqui comprobariamos la respuesta, pero en principio el voto
          // se ha realizado
        end else Writeln('No puedo acceder al servidor');
      end else Writeln('No encuentro el campo oculto');
    end else Writeln('No puedo acceder al servidor');
  finally
    Campos.Free;
    Respuesta.Free;
  end;
end;

begin
  Votar;
end.

imossa 29-05-2007 21:10:41

Bueno chicos, felicidades, creo que ha funcionado.
De verdad, gracias por vuestra ayuda.
Saludos.

Edito: el navegador no se abre jeje lo abría yo en otro punto. Ahora termino las pruebas....

imossa 31-05-2007 09:58:02

Últimos comentarios tras las pruebas realizadas:
Todo parece correcto, se hace el get y el post (en el código que me pasásteis había un pequeño error, que al llamar la segunda vez a la función que hace el post, no iban los parámetros), y he guardado las respuestas en un post, y es curioso lo que pasa:
La página se carga bien, y se ejecuta el post, pero realmente, el voto no queda registrado.
Además, si ejecuto el form desde el firefox, la página resultante viene en inglés, pero si lo ejecuto con delphi, la página la devuelve en castellano ...:confused::confused::(:(:(

Seguiré haciendo alguna prueba más a ver si lo consigo.
Gracias por todo.


La franja horaria es GMT +2. Ahora son las 08:17:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi