Entwickler-Ecke

Internet / Netzwerk - Bild von HTTPS Url in TImage


Karlson - Mo 01.08.22 19:49
Titel: Bild von HTTPS Url in TImage
Moin,

Scheitere an einem einfachen Problem: Ich möchte ein JPG von einer URL in einer TPaintBox anzeigen. Problem: Die URL ist nur via https verfügbar und alle Beispiele die ich im Netz finde beziehen sich nur auf HTTP.

Konkret verwende ich folgenden Code:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.DownloadImage(Sender: TObject);
var
  MS : TMemoryStream;
  GIf: TJPEGImage;
  IdHTTP1: TIdHTTP;

begin
  MS := TMemoryStream.Create;
  GIf := TJPEGImage.Create;
  IdHTTP1 := TIdHTTP.Create(nil);

  try
    IdHTTP1.get('https://m.media-amazon.com/images/I/51EJCVDEW1L._AC_UY436_QL65_.jpg',MS);
    Ms.Seek(0,soFromBeginning);
    Gif.LoadFromStream(MS);
    PaintBox1.Canvas.Draw(0,0, GIF);

  finally
    FreeAndNil(GIF);
    FreeAndNil(MS);
  end;
end;


Führt dann zu einer Fehlermeldung (SSL Bibliothek konnte nicht geladen werden).
Ich vermute ich muss etwas nachinstallieren um Indy SSL-fähig zu machen. Weiß aber nicht wie das geht, sorry. Habe eine Erklärung gefunden, dass ich precompiled DLL-Dateien bei Indy erhalten würde. Habe ich nicht verstanden, könnte das jemand einfacher erklären? Meine Software läuft übrigens nur auf meinem Rechner, wird nicht weitergegeben. D.h. ich bräuchte mir keine Sorgen darum machen wie ein Nutzer an eine DLL-Datei käme, falls das eine Rolle spielt.

Danke & LG


Th69 - Mo 01.08.22 21:19

Hallo,

da dürften dir OpenSSL [https://docwiki.embarcadero.com/RADStudio/Sydney/de/OpenSSL] bzw. genauer Sichern von Indy-Netzwerkverbindungen [https://docwiki.embarcadero.com/RADStudio/Sydney/de/Sichern_von_Indy-Netzwerkverbindungen] weiterhelfen.

Programmcode dazu habe ich u.a. in TIDHTTP - Open SSL - TLS [https://www.delphipraxis.net/203986-tidhttp-open-ssl-tls.html] (3. Beitrag) gefunden.


Gausi - Di 02.08.22 08:14

Wenn du neuere Delphi-Versionen einsetzt, und auch die von MS nicht mehr unterstützten Windows-Versionen außen vor lassen willst, kannst du einfacher die internen THttpClient-Komponenten nutzen. Das kann von Haus aus https, ohne eigene SSL-Bibliotheken mitliefern zu müssen. Da werden wohl die Betriebssystem-Bibliotheken genutzt.


jaenicke - Di 02.08.22 08:47

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du neuere Delphi-Versionen einsetzt, und auch die von MS nicht mehr unterstützten Windows-Versionen außen vor lassen willst, kannst du einfacher die internen THttpClient-Komponenten nutzen.
Das funktioniert sogar noch mit Windows 7, außer dass dort standardmäßig nicht alle neuen Protokolle (TLS 1.2, ...) vorhanden und aktiviert sind. Das betrifft aber dann ohnehin das System selbst, sollte daher kein Problem sein.

Delphi selbst unterstützt seit Delphi XE7 ja auch nur noch Windows 7 und höher.

user profile iconGausi hat folgendes geschrieben Zum zitierten Posting springen:
Das kann von Haus aus https, ohne eigene SSL-Bibliotheken mitliefern zu müssen. Da werden wohl die Betriebssystem-Bibliotheken genutzt.
Ja, THTTPClient nutzt die WinHTTP API.

Solange man keine zertifikatsbasierte Clientauthentifizierung (Mein Ticket dazu siehe hier [https://quality.embarcadero.com/browse/RSP-34451]) benötigt, funktioniert die Klasse auch sehr gut.


Karlson - Di 02.08.22 16:26

Hi,

Danke für eure Antworten!
Ich muss sagen, ich habe jetzt einen Workaround verwendet der noch einfacher ist.


Quelltext
1:
2:
3:
4:
try
  URLMon.URLDownloadToFile(nil, PChar(Memo2.lines[0]), PChar('image1.jpg'), 0, nil);
finally
  Image1.Picture.LoadFromFile('image1.jpg');


Funktioniert mit SSL und reicht für mich...

Danke!


jaenicke - Di 02.08.22 20:23

Ob das so eine gute Idee ist, in neuem Code noch den Internet Explorer zu verwenden? URLDownloadToFile macht nichts anderes als intern Funktionalität des Internet Explorers zu verwenden, um diesen Download durchzuführen.

Solange du das nur auf deinem eigenen PC nutzt, wird das vermutlich klappen. Auf meinem würde es aufgrund der Sicherheitseinstellungen nicht gehen (das habe ich zur Sicherheit auch gerade getestet, dem ist so) und z.B. in vielen Firmen auch nicht.

Du kannst aber davon ausgehen, dass zumindest neue Protokolle, die in den nächsten Jahren kommen mögen, damit auf jeden Fall nicht mehr gehen, da der Internet Explorer ja nicht mehr weiterentwickelt wird.


Karlson - Mi 03.08.22 09:21

Wichtiger Hinweis, danke.

Für mich passt es, weil die Software lediglich ein ganz kleines Helpertool für meinen Laptop ist. Ich werde das nie weitergeben (ist viel zu speziell dafür).

Aber für andere, die über den Code stolpern natürlich wichtig zu beachten.