2012-10-04 23 views
9

Preguntaría si alguien tuvo la amabilidad de explicarme cómo iniciar sesión en la página web desde la aplicación Delphi. Todos los ejemplos que he encontrado aquí me han resultado inútiles o estoy haciendo algo mal. Estoy cansado de la búsqueda y el código que no funciona.Inicie sesión en el sitio web de Delphi

No hay ningún mensaje de error, incluso obtengo el código de la página en Memo pero parece que es código de la página de inicio de sesión (no página de la cuenta [panel]) - parece que este código no puede pasar auth y no sé por qué .

¿Qué está mal en este código:

procedure Login; 
var 
HTTP: TIdHTTP; 
Param: TStringList; 
S: String; 
begin 
HTTP := TIdHTTP.Create(nil); 
HTTP.CookieManager := Main_Form.CookieManager; 
Param := TStringList.Create; 
Param.Clear; 
Param.Add('login=example'); 
Param.Add('password=example'); 

try 
HTTP.Get ('http://www.filestrum.com/login.html'); 
HTTP.Post('http://www.filestrum.com/login.html', Param); 
S := HTTP.Get ('http://www.filestrum.com/?op=my_account'); 
Main_Form.Memo2.Lines.Add(S); 
finally 
    HTTP.Free; 
    Param.Free; 
end; 
end; 

o con esta versión:

procedure Login; 
var 
HTTP: TIdHTTP; 
S: String; 
begin 
HTTP        := TIdHTTP.Create(nil); 
HTTP.CookieManager    := Main_Form.CookieManager; 
HTTP.Request.BasicAuthentication := True; 
HTTP.Request.Username   := 'example'; 
HTTP.Request.Password   := 'example'; 
HTTP.AllowCookies    := True; 
HTTP.HandleRedirects    := True; 

S := HTTP.Get ('http://www.filestrum.com/?op=my_account'); 
Main_Form.Memo2.Lines.Add(S); 
end; 

utiliza Delphi XE2 y no hay manera de hacer este código que se ejecuta y el inicio de sesión. Es lo mismo con la demo XE3. Como dije, estoy realmente cansado buscando alguna solución, desperdiciando días y nada.

Por favor, muchachos, algo de ayuda aquí. Realmente lo necesito

+0

También han perdido 2 párrafos pidiendo ayuda (que ya lo ha hecho de forma implícita mediante la publicación de la pregunta), pero completamente olvidó mencionar lo que va mal. ¿Tiempo de compilación, tiempo de ejecución, mensajes de error específicos? – GolezTrol

+0

¿Has intentado eliminar el '/' extra que tienes en 'http: //www.filestrum.com//? Op = my_account'? – TLama

+0

No hay mensaje de error, nada. Recibo el código de la página en Memo pero parece que no pasó la autenticación. El mismo nombre de usuario y contraseña funcionan desde Firefox. http://www.filestrum.com/?op=my_account - mi error, pero sigue siendo el mismo. Cualquier cosa que intento, no puedo iniciar sesión desde el código. – Cohen

Respuesta

7

intentar algo como esto:

function Login: string; 
var 
    IdHTTP: TIdHTTP; 
    Request: TStringList; 
    Response: TMemoryStream; 
begin 
    Result := ''; 
    try 
    Response := TMemoryStream.Create; 
    try 
     Request := TStringList.Create; 
     try 
     Request.Add('op=login'); 
     Request.Add('redirect=http://www.filestrum.com'); 
     Request.Add('login=example'); 
     Request.Add('password=example'); 
     IdHTTP := TIdHTTP.Create; 
     try 
      IdHTTP.AllowCookies := True; 
      IdHTTP.HandleRedirects := True; 
      IdHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; 
      IdHTTP.Post('http://www.filestrum.com/', Request, Response); 
      Result := IdHTTP.Get('http://www.filestrum.com/?op=my_account');  
     finally 
      IdHTTP.Free; 
     end; 
     finally 
     Request.Free; 
     end; 
    finally 
     Response.Free; 
    end; 
    except 
    on E: Exception do 
     ShowMessage(E.Message); 
    end; 
end; 
+0

¿Para que 'redirigir' no sea una redirección? Suena extraño ... – TLama

+0

@ TLama: la solicitud POST emite un 302 por lo que es del lado del cliente para emitir una nueva solicitud GET – whosrdaddy

+0

Yesss ... este funciona! Chicos, muchas gracias – Cohen

Cuestiones relacionadas