Entwickler-Ecke

Internet / Netzwerk - HTTP(S)-Post mit TIdHTTP


Tony-S - Di 26.04.11 19:51
Titel: HTTP(S)-Post mit TIdHTTP
Hallo Forum,

ich bin im Forum leider nicht wirklich fündig geworden,
es geht um folgendes, ich hab hier ein Tool geschrieben,
mit dem ich Bilder auf einen Webservice hochladen kann und per TIdHTTP-Post den Link bekomme.
Dieser Service wurde jetzt auf HTTP(S) umgestellt und ja, nun funktioniert das alles nicht mehr ^_^.

Ja was funktioniert denn nicht mehr, moment hier der Code:


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:
begin
// Objekte instanzieren
  MultiPartFormDataStream := TMsMultiPartFormDataStream.Create;

  try
      // Content-Type bestimmen
      httpMain.Request.ContentType := MultiPartFormDataStream.RequestContentType;

      // Formular-Felder setzen, die keine Dateien sein sollen
      if frmPickHostSettings.cbAccount.Checked = False then MultiPartFormDataStream.AddFormField('client_key', client_key);
      if frmPickHostSettings.cbAccount.Checked then
      begin
      MultiPartFormDataStream.AddFormField('client_key', client_key);
      MultiPartFormDataStream.AddFormField('user',  frmPickHostSettings.tfUser.Text);
      MultiPartFormDataStream.AddFormField('token', frmPickHostSettings.tfToken.Text);
      end;

      // Datei laden
      MultiPartFormDataStream.AddFile('file', pnPfad.Caption, '');

      // diese Methode muss _vor_ dem Senden augerufen werden
      MultiPartFormDataStream.PrepareStreamForDispatch;
      MultiPartFormDataStream.Position := 0;

      try
        // -->    
        // Anfrage abschicken
        Response := httpMain.Post('https://pickhost.eu/api/upload', MultiPartFormDataStream);
        // <--
      except
       frmPickHostFehler.Show;
       frmPickHostFehler.BringToFront;
       frmPickHostFehler.Label1.Caption :=  AusgabeString;
      end;
  finally
  MultiPartFormDataStream.Free;
  end;
end;


Das einzige was ich bisher geänderte habe ist die URL und zwar von http in https.
Der Fehler den ich bekomme ist:

Exception

Der Abschnitt um den es geht ist der mit den auskommentierten Pfeilen.
Es kann gut sein das vllt ein end fehlt, aber dann nur weil ich für das Forum unnötiges rausgenommen hab.

Gibt es eine andere Komponente oder geht es irgendwie mit dieser einen HTTPS Post auszuführen) Ich wäre euch jedenfalls sehr dankbar für eure Hilfe.

MfG Tony-S

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.


jaenicke - Di 26.04.11 21:07

Da steht doch schon, dass der IOHandler ungültig ist, du kannst als IOHandler einfach eine TIdSSLIOHandlerSocketOpenSSL Komponente zuweisen. Außerdem benötigst du natürlich die OpenSSL-DLLs. Die können im Verzeichnis der Exe liegen.


Tony-S - Di 26.04.11 23:28

Okay danke schon mal. Ich muss schon zugeben das ich mich nicht bis ins Detail mit der Komponente beschäftigt habe,
du hattest mir vor einem Jahr schon einmal damit geholfen, ich hab das in sofern verstanden das ich gewisse Felder füllen muss um eine Abfrage auszuführen und es ging ;).

Was genau ist denn der "IOHandler"?
Die TidHTTP-Komponente hat ja eine Eigenschaft die so heißt, aber wie soll ich dort eine Komponente zuweisen, wo bekomm ich die und die anderen DLLs her.
gibt es denn nicht auch eine (kostenlose) Komponente die nicht externe DLLs benötigt?

Wenn mir das jemand oder vllt du Schritt für Schritt erklären könntest wo ich was wie mache, wäre ich schon echt zufrieden.

MfG Tony-S


jaenicke - Mi 27.04.11 02:14

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Was genau ist denn der "IOHandler"?
Der regelt einfach gesagt die Kommunikation.

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Die TidHTTP-Komponente hat ja eine Eigenschaft die so heißt, aber wie soll ich dort eine Komponente zuweisen, wo bekomm ich die
Naja, die Komponente kannst du einfach aufs Formular legen, die ist bei Indy dabei, dann steht die bei IOHandler zur Auswahl. :zwinker:
Oder du schreibst das in FormCreate:

Delphi-Quelltext
1:
  httpMain.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(Self);                    
Und die uses:

Delphi-Quelltext
1:
2:
uses
  IdSSLOpenSSL;


user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
und die anderen DLLs her.
http://www.openssl.org/related/binaries.html

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
gibt es denn nicht auch eine (kostenlose) Komponente die nicht externe DLLs benötigt?
Nicht dass ich wüsste, jedenfalls nicht kostenlos und wenn, dann nicht mit Indy.


Tony-S - Mi 27.04.11 20:26

Okay ich bin jetzt nur noch auf der Suche nach den DLLs,
ich dachte die richtigen hier: http://www.ie7pro.com/openssl.html gefunden zu haben unter deinem Link hab ich nicht so wirklich etwas gefunden.
Die zwei DLLs "libeay32" und "ssleay32" hab ich den Pfad meiner exe, wenn ich das Programm nun starte, bekomme ich die Fehlermeldung "Could not load SSL libary."
Habe ich die falschen DLLs oder muss ich an der "TIdSSLIOHandlerSocketOpenSSL"-Komponente nocht etwas einstellen?


jaenicke - Mi 27.04.11 21:10

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Okay ich bin jetzt nur noch auf der Suche nach den DLLs,
ich dachte die richtigen hier: http://www.ie7pro.com/openssl.html gefunden zu haben
Das sind alte...

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
unter deinem Link hab ich nicht so wirklich etwas gefunden.
Auf der ganzen verlinkten Seite gibt es im Inhalt rechts nur einen Link... :gruebel: nämlich dahin, da findest du unten ja die Downloads...
http://www.slproweb.com/products/Win32OpenSSL.html


Tony-S - Mi 27.04.11 22:32

Also quasi der 1. Link, der Installer ... ?
http://www.slproweb.com/download/Win32OpenSSL_Light-1_0_0d.exe <--

Wenn ich das installiert habe, habe ich dem Ordner 3 DLLs, die hab ich in mein Verzeichnis kopiert und nun?


jaenicke - Mi 27.04.11 22:37

Die Zip-Datei für Entwickler hätte auch gereicht, aber das war es eigentlich schon.

Wenn es nicht geht: Kann es sein, dass du keine aktuelle Indyversion hast? :gruebel:


Tony-S - Mi 27.04.11 22:45

Gut möglich, zumindestens is mein Delphi 7 wohl recht alt, die Indy Version demnach wohl auch.


jaenicke - Mi 27.04.11 23:08

Eine aktuelle Indy 10 gibts hier:
http://indy.fulgan.com/ZIP/


Tony-S - Do 28.04.11 18:43

Irgendwie ärgerts mich hier jede Kleinigkeit fragen zu müssen..

Ich hab den Ordner heruntergeladen, wie und was hab ich da zu installieren?


jaenicke - Do 28.04.11 20:19

Gar nichts, einfach nur unter Tools --> Umgebungsoptionen --> Bibliothek die alten Indy-Ordner rauswerfen. Dann fügst du zum Bibliothekspfad (also gleich das erste Feld oben) alle Unterordner des neuen Indy-Ordners hinzu, in denen sich .pas Dateien befinden.

Das wars auch schon. Jetzt kannst du die Komponenten dynamisch erstellen.

Für eine Installation, falls du das unbedingt willst, musst du die Packages installieren, aber frag mich nicht welche, das mache ich eigentlich nie. Viel zu umständlich. ;-)


Narses - Do 28.04.11 20:39

Moin!

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwie ärgerts mich hier jede Kleinigkeit fragen zu müssen..
Du darfst dich natürlich auch gerne selbst darum kümmern. :nixweiss: Falls es dir noch nicht aufgefallen ist: Wir sind hier keine automatische Hilfefunktion, die in deinen Browser eingebaut ist. Wir helfen ehrenamtlich und kostenlos... :roll:

cu
Narses


Tony-S - Do 28.04.11 21:25

user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

user profile iconTony-S hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwie ärgerts mich hier jede Kleinigkeit fragen zu müssen..
Du darfst dich natürlich auch gerne selbst darum kümmern. :nixweiss: Falls es dir noch nicht aufgefallen ist: Wir sind hier keine automatische Hilfefunktion, die in deinen Browser eingebaut ist. Wir helfen ehrenamtlich und kostenlos... :roll:

cu
Narses


Was soll das? Meinst du ich hätte es nicht probiert das Packet zu installieren? Auf der Indy Seite wird es z. B. anders beschrieben als es Jaenicke tat.
Irgendwie unhöflich einen deswegen so anzugeifen...

Ich werd es jetzt versuchen zu installieren - trotzdem danke.