Autor |
Beitrag |
Karlson
Beiträge: 2088
|
Verfasst: Mo 01.08.22 19:49
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
Beiträge: 4784
Erhaltene Danke: 1055
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 01.08.22 21:19
Hallo,
da dürften dir OpenSSL bzw. genauer Sichern von Indy-Netzwerkverbindungen weiterhelfen.
Programmcode dazu habe ich u.a. in TIDHTTP - Open SSL - TLS (3. Beitrag) gefunden.
|
|
Gausi
Beiträge: 8538
Erhaltene Danke: 475
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
_________________ We are, we were and will not be.
|
|
jaenicke
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 02.08.22 08: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) benötigt, funktioniert die Klasse auch sehr gut.
|
|
Karlson
Beiträge: 2088
|
Verfasst: 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
Beiträge: 19285
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 2088
|
Verfasst: 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.
|
|
|