Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Download einer Datei in App (https://www.delphipraxis.net/216879-download-einer-datei-app.html)

Rued 17. Mär 2025 12:53

Download einer Datei in App
 
Hallo!
Eigentlich ganz schön, noch einmal etwas Neues zu beginnen, aber manchmal macht mich das wahnsinnig, dass kaum `was funzzt, was bei PC-Anwendungen seit fast dreißig Jahren funzzt.

Ich will in meiner Android-App eine Datei herunterladen und habe es zunächst ganz einfach probiert:

Delphi-Quellcode:
procedure Herunterladen(Quelle, Ziel: string);
var Stream: TMemoryStream;
begin

  Stream := TMemoryStream.Create;

  try
    FMain.IdHTTP1.Get(Quelle, Stream);
    Stream.SaveToFile(Ziel);
  finally
    Stream.Free;
    FMain.IdHTTP1.Free;
  end;

end;
Ergebnis ist eine Fehlermeldung:
Im Projekt Name.apk ist eine Exception der Klasse EIdOSSLCouldNotLoadSSLLibrary mit der Meldung 'SSL.-Bibliothek konnte nicht geladen werden.' aufgetreten.

Also habe ich aufgerüstet. Alles, was nicht schnell genug auf den Bäumen war, in die Uses gefercht:
Delphi-Quellcode:
  System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP,
  IdSSLOpenSSL, IdSSLOpenSSLHeaders, IdIOHandler,
  IdIOHandlerSocket, IdIOHandlerStack, IdSSL;
Über "Bereitstellung" unter "Projekt" die Dateien libcrypto.so.1.1 und libssl.so.1.1 eingebunden.

Und die Routine wie folgt erweitert:
Delphi-Quellcode:
procedure Herunterladen(Quelle, Ziel: string);
var
  Stream: TMemoryStream;
  HTTP: TIdHTTP;
  SSLHandler: TIdSSLIOHandlerSocketOpenSSL;
begin
  Stream := TMemoryStream.Create;
  HTTP := TIdHTTP.Create(nil);
  SSLHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);

  try
    SSLHandler.SSLOptions.Method := sslvTLSv1_2;
    SSLHandler.SSLOptions.Mode := sslmUnassigned;
    HTTP.IOHandler := SSLHandler;

    HTTP.Get(Quelle, Stream);
    Stream.SaveToFile(Ziel);
  finally
    Stream.Free;
    SSLHandler.Free;
    HTTP.Free;
  end;
end;
Trauriges Ergebnis ist dieselbe Fehlermeldung.

Wie bekomme ich die dlls eingebunden?

DelTurbo 17. Mär 2025 13:22

AW: Download einer Datei in App
 
Hi,
ich glaube nicht das Indy diese Libs nimmt. Zumal das 1.1 ist und nicht 1.0.
Sollte Indy die System Libs nehmen klappt es 1000pro nicht. Das kann Indy nicht. Zu neu...

Selbst wenn Indy diese 1.0 Libs nehmen würde, kann es zu 90% sein sein das es trotzdem nicht klappt. Es gibt kaum noch Server die damit Arbeiten.

Fast überlesen: DLLs kannst du auf dem System nicht nutzen.

Der schöne Günther 17. Mär 2025 13:43

AW: Download einer Datei in App
 
Da wurde ".dll" wohl nur als Synonym verwendet.

Geschrieben wurde weiter .so, das wird für Android wahrscheinlich das richtige sein (kenne mich mit Android nicht aus).

bcvs 17. Mär 2025 14:32

AW: Download einer Datei in App
 
Ich habe Indy mit SSL auf Android auch nie hinbekommen.

Schau dir mal TNetHTTPClient an. Läuft hier unter Android und IOS problemlos.

Uwe Raabe 17. Mär 2025 14:38

AW: Download einer Datei in App
 
Zitat:

Zitat von bcvs (Beitrag 1547189)
Schau dir mal TNetHTTPClient an. Läuft hier unter Android und IOS problemlos.

Der Vorteil der bordeigenen Komponenten ist eben, dass sie die SSL-Unterstützung des Betriebssystems verwenden. Indy ist soweit ich weiß immer auf externe Bibliotheken angewiesen.

DelTurbo 17. Mär 2025 15:04

AW: Download einer Datei in App
 
Oder er soll Synapse nehmen. Das müsste auch auf Handy laufen. Zumal das OpenSSL 3.x kann.

fisipjm 17. Mär 2025 15:37

AW: Download einer Datei in App
 
Zitat:

Zitat von DelTurbo (Beitrag 1547195)
Oder er soll Synapse nehmen. Das müsste auch auf Handy laufen. Zumal das OpenSSL 3.x kann.

TNetHTTPClient kann auch SSL 3 - Außerdem läuft es auch auf iOS. In meinen Augen kein Vorteil von Synapse gegenüber der Systemkomponente.

Rued 17. Mär 2025 15:58

AW: Download einer Datei in App
 
Junge, Junge - und ich versaue mir den Sonntag mit TIdSSLIOHandlerSocketOpenSSL.
Ich danke herzlich für den Hinweis auf TNetHTTPClient - damit läuft es.

DelTurbo 18. Mär 2025 15:26

AW: Download einer Datei in App
 
Zitat:

Zitat von Rued (Beitrag 1547201)
Junge, Junge - und ich versaue mir den Sonntag mit TIdSSLIOHandlerSocketOpenSSL.

Das habe ich mit Indy auch schon durch. Am Anfang als die immer mehr Umgestellt hatten. Liefen einige meiner Tools nicht mehr. Hatte erst verzweifelt ein update gesucht.

Rued 21. Mär 2025 12:05

AW: Download einer Datei in App
 
Zitat:

Zitat von Rued (Beitrag 1547201)
Junge, Junge - und ich versaue mir den Sonntag mit TIdSSLIOHandlerSocketOpenSSL.
Ich danke herzlich für den Hinweis auf TNetHTTPClient - damit läuft es.

Hat sich erledigt.

Eine kleine Anschlussfrage sei erlaubt. Bekomme ich das Folgende auch mit einer TNetHTTPClient-Komponente hin? NetHTTPClient1.get... ist jedenfalls kein Weg. Doch. muss ContentAsString anhängen.

Delphi-Quellcode:
 Memo1.Text := IdHttp1.Get('http://www.webseite.de');


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz