Thema: Delphi idhttp login

Einzelnen Beitrag anzeigen

Benutzerbild von geskill
geskill

Registriert seit: 17. Feb 2007
Ort: NRW
420 Beiträge
 
Delphi 2010 Professional
 
#8

Re: idhttp login

  Alt 3. Aug 2008, 10:28
Ich habe mal ein Beispiel, für IdHTTP + SSL + Cookies
und bitte benutzt keine Stringlist zum Posten da wird aus dem "+" ein Leerzeichen " "
etc. Sonderzeichen... Immer schön "TIdMultiPartFormDataStream" benutzen.

Hinweis: Wenn du die Indy10 Komponenten benutzt musst du noch
was abändern, ich habe es schon wieder vergessen was es war...
Findest du aber hier im Forum. Du merkst es daran wenn eine Fehlermeldung
von wegen Timeout Fehler kommt.

Delphi-Quellcode:
uses IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
     IdHTTP, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL,
     IdMultipartFormData, IdCookieManager;

// [...]

PROCEDURE Login(LoginName,LoginPassword:String);
VAR IdHTTP:TIdHTTP; Params:TIdMultiPartFormDataStream;
    IdSSLIOHandlerSocketOpenSSL:TIdSSLIOHandlerSocketOpenSSL;
    IdCookieManager:TIdCookieManager; GetList:TStringList;

BEGIN
  IdHTTP := TIdHTTP.Create(NIL);
  GetList := TStringList.Create;
  IdCookieManager := TIdCookieManager.Create(NIL);
  IdSSLIOHandlerSocketOpenSSL := TIdSSLIOHandlerSocketOpenSSL.Create(NIL);
  Params := TIdMultiPartFormDataStream.Create;
  TRY
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvSSLv23;
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmUnassigned;
    IdHTTP.IOHandler := IdSSLIOHandlerSocketOpenSSL;
    IdHTTP.CookieManager := IdCookieManager; // Cookies man kann ja nie wissen
    IdHTTP.AllowCookies := TRUE;

    Params.AddFormField('username', UTF8Encode(LoginName)); // UTF8Encode - kommt auf die Seite an meistens nicht!
    Params.AddFormField('password', UTF8Encode(LoginPassword));

    GetList.Text := IdHTTP.Post('', Params);

    // Login auswerten ob login geklappt hat z.b. von RS
    IF NOT (Pos('The Account has been found, but the password is incorrect.',GetList.Text) = 0)
      THEN BEGIN
        ShowMessage('The Account has been found, but the password is incorrect.');
        Exit;
      END;


    // wenn man noch eine Unterseite ansteuern möchte
    FreeAndNil(Params); // die Postparameterliste löschen
    Params := TIdMultiPartFormDataStream.Create;

    // Seite wechseln etc.

  FINALLY // Freigeben
    FreeAndNil(Params);
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdCookieManager.Free;
    GetList.Free;
    IdHTTP.Free;
  END;
END;
Du benötigst im Ordner die "libeay32.dll" und "ssleay32.dll" DLL.
Grüße
Sebastian
  Mit Zitat antworten Zitat