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