Hallo,
ich habe ein Problem mit den
Indy Komponenten und SSL,
ich möchte TIdHttp und die SSL Biblioteken dazu nutzen
meine Emails bei einem WebMail Anbeiter abzurufen.
Leider unterstützt dieser kein
Pop3 oder Imap.
Nach langem Suchen und viel Kaffee habe ich dazu
folgendes kleines Tutorial gefunden und übersetzt:
1) Zunächst benötigt man Delphi 5.0 oder höher und
die
Indy Komponenten der Version 9.x.
Außerdem die aktuellen OpenSSL Biblioteken für
Indy,
erhältlich sind diese
hier.
2. Nachdem die beiden OpenSSL
dll's in das Projekt-
verzeichnis kopiert wurden benötigt man ein SSL Zertifikat.
Im Internet Explorer im Menü Extras > Internet Optionen >
Inhalte wählt man dazu den Button Zertifikate und dort
Vertrauenswürdige Stammzertifierungsstellen. Hier
sucht man sich nun ein Class 3 Zertifikat (root authority) aus
und exportiert dieses Base-64-codiert in das Projektverzeichnis.
3. In Delphi erstellt man eine neue Anwendung und plaziert
dort aus dem Reiter
Indy I/O Handlers die Komponente IdSSLIOHandlerSocket.
In den SSL-Optionen für diese Komponente wird unter CertFile das
zuvor exportierte Zertifikat ausgewählt. Zusätzlich werden
die Optionen VerifyDepth auf 2, Method auf sslvSSLv23 und
Mode auf sslmClient gesetzt.
Als nächstes plaziert man eine TIdHttp Komponente aus dem
Reiter
Indy Clients auf der Form und ergänzt folgende Optionen:
Request.ContentType mit application/x-www-form-urlencoded
und IOHandler mit TIdServerIOHandlerSSL.
4. Als nächstes benötigt man noch ein Memo zur Ausgabe und 2 Buttons.
Die OnClick Events für die Buttons sind folgende:
Get Request
Memo1.Text := IdHTTP1.Get('https://login.yahoo.com/config/login?.src=my&.v=0&.u=a0gonnoue2jjn&.last=&promo=&.intl=us&.bypass=&.partner=&.done=http%3a//my.yahoo.com');
Post Request
Delphi-Quellcode:
var
PostDataStream : TStringStream;
ParamData : TStringStream;
begin
PostDataStream := TStringStream.Create('');
ParamData := TStringStream.Create('');
ParamData.WriteString('.src=my');
ParamData.WriteString('&.v=0');
ParamData.WriteString('&.u=a0gonnoue2jjn');
ParamData.WriteString('&.last=');
ParamData.WriteString('&promo=');
ParamData.WriteString('&.intl=us');
ParamData.WriteString('&.bypass=');
ParamData.WriteString('&.partner=');
ParamData.WriteString('&.done=http%3a//my.yahoo.com');
try
//Connect
IdHTTP1.Post('https://login.yahoo.com/config/login?', ParamData, PostDataStream);
Memo1.Text := PostDataStream.DataString;
finally
ParamData.Free;
PostDataStream.Free;
end;
Das Beispiel stammt 1 zu 1 aus dem englischen Tutorial.
Nun aber mein Problem, ich habe versucht mit einigen
Abwandlungen in dem Post Request mich auf meinem
Test Account einzuloggen. Leider ohne Erfolg.
Ich lande immer wieder auf der Ausgangsseite ohne
jegliche Fehlermeldungen. Könnte vielleicht Jemand mit
einem Login auf einer SSL Webseite versuchen das Beispiel nachzuvollziehen?