Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Datei aus dem Internet herunterladen - geht nicht mehr! (https://www.delphipraxis.net/198893-datei-aus-dem-internet-herunterladen-geht-nicht-mehr.html)

NicoleWagner 8. Dez 2018 11:54

Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hallo,

seit langem lade ich eine täglich aktualisierte Datei aus dem Internet herunter.

Dazu benutze ich diesen Code:
https://www.swissdelphicenter.ch/de/showcode.php?id=412

Das Herzstück lautet:
result:=DownloadFile(SourceFile, DestFile);
(bzw. diese Zeile: Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil) = 0)
In diser Zeile gebe ich die Adressen der Dateien ein: Wo sie im Internet liegt und wohin sie auf meine Festplatte soll.

Das lief problemelos und lange, doch result bleibt seit einiger Zeit "false".

Es ist eine (vertrauliche) pdf Datei. Die Eingabe ihrer Adresse in einem Browser bewirkt, dass die Datei in meinem Downloadordner landet.
Die Datei ist also nach wie vor im Internet verfügbar.
Nur mit Delphi, mit Delphi kann ich sie nicht mehr herunterladen.
Was kann ich tun?
Gibt es einen alternativen Zugriff?


Danke für Ideen!
Nicole

DieDolly 8. Dez 2018 12:01

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich denke keiner wird wissen, wo das Problem letzten Endes liegt. Ich denke aber, wenn du den Downloadcode niemals verändert hast, kann es nur am Webserver liegen.
Ich hoffe du überträgst brav verschlüsselt, da es sich ja um eine vertrauliche Datei handelt.

Teste mal die Unit. Vielleicht klappts mit der besser (?).

NicoleWagner 8. Dez 2018 14:44

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Lieben Dank! Ich werde die Unit demnächst einbauen und berichten.
Halte mir die Daumen ;-)

TigerLilly 8. Dez 2018 15:12

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Vielleicht hat dein gegenüber von http auf https umgestellt?

Dalai 8. Dez 2018 15:17

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Da diese Funktion DownloadFile sicherlich die OS-Funktionen benutzt - genauer gesagt die des IE bzw. dessen Engine - würde ich als erstes den Download mit dem IE probieren. Klappt das nicht, kannst du dort ansetzen.

Grüße
Dalai

Luckie 8. Dez 2018 17:07

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Was sagt GetLastError?

NicoleWagner 10. Dez 2018 18:14

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Danke für die Antworten.
Die Seite ist bereits https Protokoll. Doch danke für die Idee, ich habe sie sofort geprüft.

Doch jetzt wird es spannend, denn der IE sagt "die Seite kann nicht angezeigt werden".
Firefox zeigt sie mir an bzw. vollzieht den Download.

Jetzt habe ich vom command prompt aus pings rausgeschickt. Die Domain ist positiv, doch das eine Ober-Unterverzeichnis, in dem das File liegt, antwortet "ich bin nicht hier".
Von Netzwerken weiß ich nicht viel. Vielleicht sollen Unterverzeichnisse das sagen, dass man sie grundsätzlich nicht pingen soll?

Doch wie mache ich weiter? Offenbar ist der ie Zugriff gesperrt.
Kann Delphi irgendwie sagen "ich bin Firefox"?

DieDolly 10. Dez 2018 18:29

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Wenn es vorher ging, jetzt nicht mehr und du nix am Server geändert hast, liegt es wohl eher am PC als am Server.
Mache deine Tests am besten mal von einem anderen PC im selben Netzwerk und dann von einem außerhalb deines Netzwerks.

Dalai 10. Dez 2018 20:37

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Von welcher IE-Version reden wir? IE8 oder IE11? Welche Art der Verschlüsselung gibt der Firefox an (Klick auf das Schloss-Symbol > Pfeil rechts (Verbindungsdetails) > Weitere Informationen)? Ist im IE bzw. dem System ein Proxy eingetragen?

Grüße
Dalai

Rolf Frei 10. Dez 2018 22:41

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Und die Firewall nicht vergessen. Kann gut sein dass diese nur noch den Firefox durchlässt und den IE sperrt. Kannst du denn mit dem IE auf anderen Websites surfen? Was schon mal gefragt wurde: Was gibt nach dem Aufruf GetLastError zurück?

NicoleWagner 11. Dez 2018 09:27

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Ja, ich komme mit dem ie auf andere Websites.
Ja, ich komme mit anderen Browsern auf die Datei.

"GetLastError": Wann und von welcher Plattform aus rufe ich das auf?
In Delphi kann ich nur lesen, dass das result von download "false" ist.
Und im Explorer nur, dass keine Verbindung bestünde, wenn ich diese Datei als Adresse direkt eingebe.

4dk2 11. Dez 2018 09:48

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1420562)
Ja, ich komme mit dem ie auf andere Websites.
Ja, ich komme mit anderen Browsern auf die Datei.

"GetLastError": Wann und von welcher Plattform aus rufe ich das auf?
In Delphi kann ich nur lesen, dass das result von download "false" ist.
Und im Explorer nur, dass keine Verbindung bestünde, wenn ich diese Datei als Adresse direkt eingebe.


GetLastError, gibt dir die letzte Betriebsystem Fehlermeldung zurück.
z.b.
Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError))
ist nicht zufällig nen W10 Rechner, und die Datei wird auf nen Netzlaufwerk geladen?

DieDolly 11. Dez 2018 10:01

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von Rolf Frei (Beitrag 1420541)
Und die Firewall nicht vergessen. Kann gut sein dass diese nur noch den Firefox durchlässt und den IE sperrt. Kannst du denn mit dem IE auf anderen Websites surfen? Was schon mal gefragt wurde: Was gibt nach dem Aufruf GetLastError zurück?

Firewall schließe ich mehr als aus
Zitat:

Das lief problemelos und lange, doch result bleibt seit einiger Zeit "false".

CCRDude 11. Dez 2018 10:18

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Aktuell häufiger anzutreffen: Server werden sicherer, nehme nicht mehr jede SSL/TLS-Version.

Schritt 1: Webseite auf kompatible Versionen testen:
https://www.ssllabs.com/ssltest/

Schritt 2: Prüfen ob Deine IE-Version noch kompatibel ist:
https://en.wikipedia.org/wiki/Transp...y#Web_browsers

Da findet sich z.B.:
* Dass alle IE-Versionen kein TLS 1.3 können (noch normal)
* Dass IE-Versionen bis IE 10 kein TLS 1.1 oder TLS 1.2 können (bzw. siehe hier

Eine Umstellung auf mindestens TLS 1.1 ist für moderne Webserver sinnvoll und verbreitet (Delphi-Praxis unterstützt auch noch TLS 1.0, wird dafür aber als schwächer bewertet), und nicht jeder Rechner hat definitiv die neueste IE-Version.

Aus diesem Grund bevorzuge ich auch Synapse (oder Indy), da kann ich das Niveau dank mitliefern der passenden OpenSSL-Versionen ohne so eine externe Abhängigkeit anpassen.

NicoleWagner 12. Dez 2018 09:52

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
ShowMessage(SysErrorMessage(GetLastError)) lautet: "Der Vorgang wurde erfolgreich beendet."
Den IE habe ich aktualisiert, von Version 9 auf 11.
Doch leider ist mein Problem unverändert.

DieDolly 12. Dez 2018 11:54

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hast du schon die Unit von mir mit den Indies getestet? Und dann auch noch den Test von einem anderen PC und von außerhalb des Netzwerk ausführen.

HolgerX 12. Dez 2018 12:41

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hmm..


War da nicht mal was mit der IE-Version je Applikation (Registry-Eintrag)
und dem Blocken von Seitenzugriffen?

Oder galt das nur für den TWebBrowser (mit IE)?

hoika 12. Dez 2018 16:18

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hallo,
Holger, was du meinst, ist wohl FEATURE_BROWSER_EMULATION.
Das war für den TWebBrowser.

NicoleWagner 15. Dez 2018 11:28

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Die Unit (allerstes Posting) ist für mich unter Delphi XE 3 ein Minenfeld.
Es beginnt damit, dass die ganz normale Var Deklaration fehlt:
Var HTTPFileDownload: THTTPFileDownload;

und endet damit, dass Property Deklarationen nicht da sind.
Mir fliegt das mit einer Schutzverletzung nach der anderen um die Ohren.
Kaum habe ich etwas auskommentiert (etwa die Forschrittsanzeige braucht man nicht unbedingt), muss ich das nächste Teil auseinandernehmen.

Ich habe jetzt aufgegeben, weil mir die IDE so um die Ohren fliegt, dass ich sie neu starten muss.


Hat jemand vielleicht noch eine Idee?

Dalai 15. Dez 2018 14:41

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1420926)
Hat jemand vielleicht noch eine Idee?

Da ein generelles Problem vorliegt (IE kann den Download ebenfalls nicht ausführen), würde ich zumindest versuchen, es zu lösen oder wenigstens nach der Ursache zu suchen. Dazu ist es aber nötig, dass du meine Fragen so gut es geht beantwortest; siehe Beitrag #9. Vor allem die Punkte Verschlüsselung und Proxy sind wichtig.

Grüße
Dalai

jaenicke 15. Dez 2018 15:15

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Auch der Internet Explorer enthält Debugtools (erreichbar mit F12). Dort kannst du alle Anfragen unter dem Reiter Netzwerk sehen. Wenn du diese anklickst, siehst du rechts Anforderungs- und Antwortheader. Ein Screenshot dieser Informationen könnte schon helfen um zu verstehen was da schief geht. Dabei solltest du natürlich Daten wie die URL, die du nicht bekannt geben möchtest, schwärzen.

NicoleWagner 15. Dez 2018 16:04

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
cit posting 9:
Von welcher IE-Version reden wir? IE8 oder IE11? Welche Art der Verschlüsselung gibt der Firefox an (Klick auf das Schloss-Symbol > Pfeil rechts (Verbindungsdetails) > Weitere Informationen)? Ist im IE bzw. dem System ein Proxy eingetragen?



Erst hatte ich Version 9, danach 11, weil ich probierte, ob ein Update helfe. Tat es nicht.
Es handelt sich um eine reine Programmier-VM. Da ist am Browser gar nichts verstellt, also kein proxy oder so. Die VM geht "normal" nicht ins Internet. Firefox ist ebenfalls nicht installiert, weil die VM keinen Firlefanz hat. Mit dem IE aus der VM komme ich jedoch jedenfalls auf anderes Seiten, nur auf dieses eine Link eben nicht mehr bzw. klappt der Download von dort nicht mehr.

Verbidungsdetails ins insofern schwierig, weil die Adresszeile sofort den Download startet und kein Anzeige der Datei stattfindet.
Die Adresse ist jedenfalls eine https://
Mit Firefox von einem anderen Rechner aus prüfte ich, ob es die Datei noch gibt: ja, tut sie.

Dalai 15. Dez 2018 16:48

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Das bedeutet, bisher hast du Firefox von System A mit IE auf System B verglichen? Klingt nach Obstvergleich. Und wenn du von VM schreibst: Wie sieht es mit Browsertests auf dem Host aus?

Grüße
Dalai

NicoleWagner 15. Dez 2018 16:51

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Firefox liegt auf dem Host. Der Test ist positiv.

Meine Idee zur VM und Delphi wäre diese: Gibt es einen Weg, die Verbindung meines Delphis genauer zu befragen? Ich lese nur "false", wenn ich die Downloadbefehlszeile ausführe. Doch keine Details dazu.

Oder wieder anders gefragt: Gibt es noch andere Befehle, mit denen man von innerhalb Delphis aus dem Netz herunterladen kann?
Oder Befehle mit mehr Parametern, die Rückemeldungen zu Fehler geben?

jaenicke 15. Dez 2018 17:01

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1420940)
Meine Idee zur VM und Delphi wäre diese: Gibt es einen Weg, die Verbindung meines Delphis genauer zu befragen? Ich lese nur "false", wenn ich die Downloadbefehlszeile ausführe. Doch keine Details dazu.

Das brauchst du doch gar nicht machen. Wenn es im Internet Explorer auch nicht geht, hast du doch genügend Standardwerkzeuge zur Analyse. Angefangen wie gesagt vom eingebauten Debugger bis hin zu Fiddler usw.

Rolf Frei 17. Dez 2018 13:07

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1420661)
ShowMessage(SysErrorMessage(GetLastError)) lautet: "Der Vorgang wurde erfolgreich beendet."
Den IE habe ich aktualisiert, von Version 9 auf 11.
Doch leider ist mein Problem unverändert.

GetLatestError funktioniert hier nicht. UrlDownloadToFile ist eine COM/OLE-Funktion und die liefert ein HResult zurück. Passe deine Downloadfunktion daher mal wie folgendes an:
Code:
function DownloadFile(SourceFile, DestFile: string): Boolean;
begin
  OleCheck(UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0, nil));
  Result := True;
end;
Das liefert dir dann im Erfolgsfall True zurück. Im Fehlerfall wird eine Exeption ausgelöst in der du den Fehlercode siehst. Nach dem müsste man dann weiter schauen, was der bedeutet.

NicoleWagner 17. Dez 2018 19:31

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Die Zeile mit dem Ole-Befehl probierte ich jetzt.
Ich kenne mich mit OLE gar nicht aus. Habe nur copy&paste in meinen Code getan.

Wenn die Zeile erreicht wird, lese ich:
..EOleSYsError .... 800C005

ich hoffe, irgend jemand kann damit etwas anfangen.


PS: Ich habe diverse Probleme mit diesem ole-Ding an sich. Etwa musste ich den Compiler von 64 auf 32 bit umstellen, damit die IDE ihn bzw. seine Unit nahm. Ist der schon älter?

DieDolly 17. Dez 2018 19:38

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hast du meine Unit schon ausprobiert?

hoika 17. Dez 2018 20:34

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hallo,
immerhin ist das Problem bekannt.

https://answers.microsoft.com/en-us/...9-87caf9c54277

und hier vielleicht sogar eine Lösung?
https://support.microsoft.com/de-de/...you-scan-for-u

Rolf Frei 18. Dez 2018 00:11

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von NicoleWagner (Beitrag 1421092)
Die Zeile mit dem Ole-Befehl probierte ich jetzt.
Ich kenne mich mit OLE gar nicht aus. Habe nur copy&paste in meinen Code getan.

Wenn die Zeile erreicht wird, lese ich:
..EOleSYsError .... 800C005

ich hoffe, irgend jemand kann damit etwas anfangen.


PS: Ich habe diverse Probleme mit diesem ole-Ding an sich. Etwa musste ich den Compiler von 64 auf 32 bit umstellen, damit die IDE ihn bzw. seine Unit nahm. Ist der schon älter?

Das ist folgender Fehler:
Code:
INET_E_RESOURCE_NOT_FOUND 0x800C0005    

The server or proxy was not found.
Also findet er den Server deiner URL nicht. Das kann aber viele Gründe haben. Keine DNS Auflösung, Schreibfehler im Domainteil der URL, keine Internetverbindung, etc. Poste doch mal deine URL hier rein. Irgendwas scheint da mit deiner URL faul zu sein.

http://<domain>/<path>
Wenn deine URL z.B. http://www.microsot.com/... lautet (Schreibfehler) sollte der Fehler kommen, oder halt eben, wenn der DNS den Namen nicht in eine IP auflösen kann.

Eine Liste der hier zutreffenden Fehlercodes findest du übrigens hier:
https://technet.microsoft.com/en-us/...or=-2147217396

jaenicke 18. Dez 2018 06:07

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von Rolf Frei (Beitrag 1421103)
Poste doch mal deine URL hier rein. Irgendwas scheint da mit deiner URL faul zu sein.

Da diese ja offenbar vertraulich ist, hatte ich ja den Screenshot aus dem IE vorgeschlagen. Denn dort wären die relevanten Informationen zu sehen ohne dass wir die URL brauchen.

hoika 18. Dez 2018 07:09

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hallo,
Zitat:

Also findet er den Server deiner URL nicht. Das kann aber viele Gründe haben. Keine DNS Auflösung, Schreibfehler im Domainteil der URL, keine Internetverbindung
Es klappt ja angeblich nur mit dem IE nicht, Firefox oder Chrome laden die Datei runter.

Ich würde auf jeden Fall mal einen anderen Rechner ausprobieren,
um sicherzustellen, das nicht im IE ein falscher Proxy eingestellt ist.
Aber: Es wurde ja angeblich nichts geändert.

Rolf Frei 18. Dez 2018 12:07

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von jaenicke (Beitrag 1421108)
Zitat:

Zitat von Rolf Frei (Beitrag 1421103)
Poste doch mal deine URL hier rein. Irgendwas scheint da mit deiner URL faul zu sein.

Da diese ja offenbar vertraulich ist, hatte ich ja den Screenshot aus dem IE vorgeschlagen. Denn dort wären die relevanten Informationen zu sehen ohne dass wir die URL brauchen.

Dann soll sie halt den Pfadteil der URL löschen oder ändern. Kommt dann halt eine 404, respektive ein Dowload einer 404 HTML-Seite, aber das Probem liegt ja anscheinend nicht darin sondern im Serverteil der URL. Also http://server/irgendwas...

NicoleWagner, hast du schon mal die IP anstelle des Domainnamen versucht. Also anstatt zum Beispiel www.microsoft.com eben http://52.164.206.56/<Rest der URL>. So könntest du schon mal ausschliessen, dass es ein DNS Problem ist.

Ah ja und hast du eigentlich nun die Unit von DieDolly getestet (1. Seite)? Das läuft über die Indy Komponenten. Du brauchst da aber noch die OpenSSL DLL's wenn dein Link über Https läuft. Ich hätte das schon immer so gemacht und nicht auf einer Funktion des IE aufgebaut. Kann mir sehr gut vorstellen, dass diese IE Funktion mit einem Security-Patch daktiviert oder behindert wurde.

Und deaktiviere bitte mal die Windows Firewall auf dem PC von dem aus du das machst. Vermute immernoch stark, dass die deine EXE, die den Aufruf macht, blockiert.

NicoleWagner 20. Dez 2018 10:25

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Danke für die vielen sehr, sehr guten Vorschläge. Leider half noch keiner, doch solange Ihr nicht aufgebt, ich tue es nicht.


Das sind die Ergebnisse der Versuche:

an Dolly und unit:
Ja. Leider hatte ich Probleme, welche Delphi Version hast Du denn? Details zu Problemen siehe Posting 19

as IE und Fehlerausgabe: Ich habe F12 probiert, doch da kommt nichts Verwertbares (ala "ein Fehler ist da")
Screenshot der Fehlermeldungen wollte ich also tun, doch komme zumindest mit F12 und LastError nicht weiter.
Ich könnte mir vorstellen, dass der IE Fehlerausgabe schlecht funktioniert auf "nicht-seiten", also Seiten die nur den Download starten, aber nicht angezeigt werden

ad Neuregistireren der dll lt. MS
Ich habe es probiert, konnte jedoch die
regsvr32 Initpki.dll nicht registieren, die anderen drei dlls schon
(Anmerkung: es ist ein Desktop PC)
Leider half es nicht.

Domain durch IP Adresse ersetzen probiert, leider klappt das auch nicht.

Danke, allen, die noch weitertüfteln!

jaenicke 20. Dez 2018 11:15

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von NicoleWagner (Beitrag 1421364)
Ich habe F12 probiert, doch da kommt nichts Verwertbares (ala "ein Fehler ist da")
Screenshot der Fehlermeldungen wollte ich also tun, doch komme zumindest mit F12 und LastError nicht weiter.
Ich könnte mir vorstellen, dass der IE Fehlerausgabe schlecht funktioniert auf "nicht-seiten", also Seiten die nur den Download starten, aber nicht angezeigt werden

Wenn ich eine Downloadadresse einfach eingebe und Enter drücke, sieht es bei mir so aus:

Anhang 50481

Rolf Frei 20. Dez 2018 12:40

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
NicoleWagner vergiss mal GetLatest das hilft dir hier nichts. Das geht nicht mit dieser Funktion. Der HResult Code der Funktion liefert dir ja den Grund, wieso es nicht klappt. Du hast ja den Fehlercode 800C0005 schon bekommen und der sagt ganz klar, dass der Server deiner URL nicht gefunden wird. Das kann folgende Gründe haben und welcher davon nun zutrifft musst du nun feststellen:

- Den Server gibt es nicht mehr.
- Der DNS kann den Serverteil der URL nicht in eine IP auflösen.
- Eine Firewall blockiert den Netzwerkverkehr für deine Anwendung. (Hast du die Windows Firewall mal deaktiviert?)

Was Anderes kann es eigentlich nicht mehr sein. Also überprüfe diese Punkte und zwar jeweils vom PC aus auf dem dein Programm läuft!

Poste bitte mal deine URL hierein. Der Teil nach dem Server kannst du gerne weglassen oder veränderst ihn, wenn der so geheim ist.

DieDolly 20. Dez 2018 12:54

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Ja. Leider hatte ich Probleme, welche Delphi Version hast Du denn?
Delphi 10.3. Es lief auch mit 10.2.
XE 3 ist vielleicht einfach zu alt.

Wenn du nicht mehr als 5000 USD oder EUR, keine Ahnung, pro Jahr verdienst kannst du auch Delphi CE 10.3 runterladen. Das ist quasi eine Pro-Version.

Rolf Frei 20. Dez 2018 16:00

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Zitat:

Zitat von DieDolly (Beitrag 1421395)
Zitat:

Ja. Leider hatte ich Probleme, welche Delphi Version hast Du denn?
Delphi 10.3. Es lief auch mit 10.2.
XE 3 ist vielleicht einfach zu alt.

Wenn du nicht mehr als 5000 USD oder EUR, keine Ahnung, pro Jahr verdienst kannst du auch Delphi CE 10.3 runterladen. Das ist quasi eine Pro-Version.

Habe das eben mal in XE3 getestet und da lässt sich das anstandslos ohne Fehler kompilieren. Solange man nicht Indy 9 nutzt, geht das problemlos. Und Indy 10 war bei XE3 auch schon standartmässig dabei.

Ich habe einfach rasch eine neue VCL Anwendung erstellt und da in der Form1 im OnCreate den Aufruf platziert. Die Klassendefinition der Downloadkomponente habe ich auch einfach zum Testen direkt in der Unit1 platziert. Was aber noch fehlt sind die OPENSSL DLL's. Ohne die geht kein HTTPS.

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
 IdComponent, IdHTTP, IdSSLOpenSSL;

type
 THTTPFileDownload = class(TIdHTTP)
 private
  FProgress: Integer;
  FWorkCount, FBytesTransfered, FBytesToTransfer, FBytesTransferedEnd: Int64;
  FOnChange, FOnEnd: TNotifyEvent;
  IOHndl: TIdSSLIOHandlerSocketOpenSSL;
  procedure ResetVars;
  procedure HTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
  procedure HTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
  procedure HTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
  procedure SetProgress(const Value: Integer);
  procedure SetOnChange(const Value: TNotifyEvent);
  procedure SetOnEnd(const Value: TNotifyEvent);
 public
  constructor Create(AOwner: TComponent);
  destructor Destroy; override;
  function DownloadFile(const aFileUrl: string; const aDestinationFile: string): Boolean;

  property Progress: Integer read FProgress write SetProgress;
  property WorkCount: Int64 read FWorkCount write FWorkCount;
  property BytesTransfered: Int64 read FBytesTransfered write FBytesTransfered;
  property BytesTransferedEnd: Int64 read FBytesTransferedEnd write FBytesTransferedEnd;
  property BytesToTransfer: Int64 read FBytesToTransfer;
  property OnChange: TNotifyEvent read FOnChange write SetOnChange;
  property OnEnd: TNotifyEvent read FOnEnd write SetOnEnd;
 end;


constructor THTTPFileDownload.Create(AOwner: TComponent);
begin
 inherited;

 IOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
 Request.BasicAuthentication := True;
 HandleRedirects := True;
 IOHandler := IOHndl;

 ReadTimeout := 3000;
 ConnectTimeout := 3000;
 IOHndl.ReadTimeout := 3000;
 IOHndl.ConnectTimeout := 3000;

 OnWork := HTTPWork;
 OnWorkBegin := HTTPWorkBegin;
 OnWorkEnd := HTTPWorkEnd;
end;

destructor THTTPFileDownload.Destroy;
begin
 IOHndl.Free;

 inherited;
end;

procedure THTTPFileDownload.ResetVars;
begin
 Progress := 0;
 FWorkCount := 0;
 FBytesToTransfer := 0;
 FBytesTransfered := 0;
end;

function THTTPFileDownload.DownloadFile(const aFileUrl: string; const aDestinationFile: string): Boolean;
var
 LDestStream: TFileStream;
 aPath: string;
begin
 try
  ResetVars;
  aPath := ExtractFilePath(aDestinationFile);

  if aPath <> '' then
   ForceDirectories(aPath);

  LDestStream := TFileStream.Create(aDestinationFile, fmCreate);
  try
   Get(aFileUrl, LDestStream);
   Result := True;
  finally
   FreeAndNil(LDestStream);
  end;
 except
  Result := False;
 end;
end;

procedure THTTPFileDownload.HTTPWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
begin
 if BytesToTransfer = 0 then // No Update File
  Exit;

 WorkCount := AWorkCount;
 Progress := Round((AWorkCount / BytesToTransfer) * 100);
 BytesTransfered := (BytesToTransfer div 100) * Progress;
end;

procedure THTTPFileDownload.HTTPWorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
 FBytesToTransfer := AWorkCountMax;
end;

procedure THTTPFileDownload.HTTPWorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
 FBytesTransferedEnd := FBytesTransfered;
 if Assigned(FOnEnd) then
  FOnEnd(Self);

 FWorkCount := 0;
 FBytesToTransfer := 0;

 ResetVars;

 Progress := 100;
end;

procedure THTTPFileDownload.SetOnChange(const Value: TNotifyEvent);
begin
 FOnChange := Value;
end;

procedure THTTPFileDownload.SetOnEnd(const Value: TNotifyEvent);
begin
 FOnEnd := Value;
end;

procedure THTTPFileDownload.SetProgress(const Value: Integer);
begin
 FProgress := Value;

 if Assigned(FOnChange) then
  FOnChange(Self);
end;

//-----------------------

procedure TForm1.FormCreate(Sender: TObject);
var
  DL: THTTPFileDownload;
begin
  DL := THTTPFileDownload.Create(nil);
  try
    DL.DownloadFile('http:\\www.meinwebserver.com\test\test.zip', 'C:\Temp\test.txt');
  finally
    DL.Free;
  end;
end;

end.

NicoleWagner 20. Dez 2018 16:39

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
@jaenicke: Und wenn das Download Link 'gebrochen' ist? bzw. der Downlaod NICHT glatt läuft?

@Rolf: Firewall deaktivieren half nicht.
Den Server und die Datei gibt es sicher noch, weil Firefox die Datei vom Host her holen kann.
Dem Domainnamen durch die IP-Nr ersetzen habe ich schon probiert.
Sorry, die url kann ich nicht posten. Sie ist auf eine vertrauliche Datei.

@DieDollie: So lieben Dank für die Arbeit, die Du Dir gemacht hast! Ich glaube, hier ist eine heiße Spur.
Ich erstellte ein neues Projekt und sah diese Fehlermeldung:
"Im Projet_Download_Url.exe ist eine Exception der Klasse EIOSSLCouldNotLoadSSLibrary mit der Meldung SSL-Bibliothek konnte nicht geladen werden' aufgetreten."
Die Gretchenfrage ist jetzt: Wie und was muss ich laden?

hoika 20. Dez 2018 16:44

AW: Datei aus dem Internet herunterladen - geht nicht mehr!
 
Hallo,
es fehlen die OpenSSL-DLLs (libeay32.dll, ssleay32.dll), am besten erst mal in das Programmverzeichnis kopieren.
Den Link findest Du über "Suchen", war gestern oder vorgestern gerade was hier.

(https://www.delphipraxis.net/114945-...tsupdates.html)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 Uhr.
Seite 1 von 3  1 23      

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