Entwickler-Ecke
Internet / Netzwerk - Bild von HTTPS Url in TImage
Karlson - Mo 01.08.22 18: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
Gausi - Di 02.08.22 07: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 07:47
Gausi hat folgendes geschrieben : |
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.
Gausi hat folgendes geschrieben : |
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 15: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 19: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 08: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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!