strgalt - Sa 23.09.06 20:58
Titel: Indy und SSL --- die Tausendste
Hallöchen zusammen,
ich versuche nun schon seit Tagen mit diesen Indy- Komponenten einen SSL POST hinzubekommen. Zuerst mit Delphi 2006, da hatte ich ständig einen Read Timeout Fehler. Hab dann das Developer Studio wieder runtergeschmissen (mal unter uns: Die ist ja super sch... Und wenn ich was unter NET schreib, dann lieber mit M$ C#). Hab dann wieder Delphi 6 installiert (mit Update Pack 2 und RTL 3). Habe dann Indy 10.1.5_d6 installiert (mit der automatische Installation). Gesaugt habe ich mir dann noch alle DLL- Packs von OpenSSL (bis 0.96k).
In einem neuen Projekt einen Button, idHTTP und ein idSSLIOHeaderSocketOpenSSL drauf und folgende Eigenschaften eingestellt:
idSSLIOHeaderSocketOpenSSL1:
CertFile: Hab ich ein Klasse 3 aus dem IE als BASE64 exportiert
und dort eingetragen
Method:
Mode:
VerifyDepth:
idHTTP1:
HandleRedirects:
IOHeader: IdSSLIOHandlerSocketOpenSSL1
ButtonClick sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| unit Unit_frm_Main;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, IdTCPClient, IdHTTP, IdBaseComponent, IdComponent, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, StdCtrls, IdTCPConnection;
type Tfrm_Main = class(TForm) Button1: TButton; Memo1: TMemo; IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL; HTTP_eBay: TIdHTTP; procedure Button1Click(Sender: TObject); private public end;
var frm_Main: Tfrm_Main;
implementation
{$R *.dfm}
procedure Tfrm_Main.Button1Click(Sender: TObject); var Temp : TStrings;
begin Temp.Create(); Temp.add('Name: Test'); Temp.add('pass = 12'); try idHTTP1.Post('https:\\www.google.de',Temp) except showmessage('Fehler'); end; end;
end. |
Zunächst hat er nach dem Klick auf den Button nach einer 'idHTTP.pas' verlangt. Die hab ich dann im Verzeichnis C:\Programme\Indy 10 for Delphi 6\Source\Protocols gefunden und ihm zum fressen gegeben.
Und jetzt bekomme ich einen Zugriffsfehler nach dem Klick auf den Button
| Zitat: |
Im Projeekt Projekt1.exe ist eine Exception der Klasse EAccessVioaltion aufgetreten. Meldung: Zugirffsverletzung bei Adresse ... in Modul 'Projekt1.exe'. Lesen von Adresse ... Prozeß wurde angehalten. |
Es öffnet sich dann ein Codefenster mit der 'idHTTP.pas'.Er markiert die Zeile 762, eine For- Schleife.
Ich hoffe mal, dass mir jemand weiterhelfen kann. Kann ja nicht sein, dass so eine Standart- Technik so gar nicht zu machen ist mit Native Delphi (aber Geld geb ich dafür keins aus). Hatte mir ja auch schon die WinInet.dll dynamisch eingebunden - das hat auch wunderbar gefunzt, aber wenn ich native schreib, dann will ich keinen M$ Müll dabei haben. Allerding, und das würde mir echt leid tuhen, wenn ich das nicht bald gebacken bekomme, dann muss ich das leider mit M$ C# machen, denn mit dem Frameworks geht das ja wie Buttons auf ne Form ziehen.
Übrigens: Wenn ich mit GET abrufen will, funktionierts auch mit https, es geht nur bei POST nicht.
Mit Dank im Voraus
Sascha
matze - So 24.09.06 09:17
also mir kommt ja dein Post Befehl etweas merkwürdig vor.
Änder mal die Zeilen so ab:
Delphi-Quelltext
1: 2:
| Temp.add('name=Test'); Temp.add('pass=12'); |
Was der Doppelpunkt da soll, weiß ich echt nicht und die Leerzeichen gehören da eigendlich auch nicht hin !
Edit: Weil mir das grade einfällt, hast du auch den Port der Indy HTTP geändert?
HTTPS läuft ja nicht über den 80er Prot sondern über 443 (glaub ich, da bin ich mir nicht sicher!)