![]() |
Download aus INet - fertiger Code gesucht
Hallo Leute. Ich programmiere gerade ein Setup für ein eigenes Programm. (Ich weiß, dass es Inno Setup u Co gibt, aber die Sache hier ist kompliziert und dafür ist Delphi besser geeignet.)
Das Setup ist sehr umfangreich und fast fertig. Was noch fehlt, sind Funktionen für INet-Downloads. Zum einen direkte Downloads (zip's die automatisch entpackt werden sollen), zum anderen Aufrufe von Download-Webseiten im Standard-Browser (wo der User die Downloads selbst durchführt). Da das Setup wie gesagt sehr umfangreich geworden ist, habe ich seit Wochen darauf mehr Zeit verwendet, als auf die Entwicklung des eigentlichen Programms. Ich würde mich sehr freuen, wenn jemand fertigen Code zur Verfügung stellen würde, mit dem man die Downloads umsetzen kann. Das würde mich echt entlasten. :thumb: Guido. |
AW: Download aus INet - fertiger Code gesucht
Fertigen Code haben wir nicht.
Wochen für ein Setup zu brauchen, ist auch eine Sache. Ich halte portable Software in Ehre. Ansätze: THTTPRIO, TDownloadURL, TBrowseURL, TIdHTTP uvm. |
AW: Download aus INet - fertiger Code gesucht
Hallo Redeemer.
Zitat:
Zitat:
Zitat:
Zitat:
|
AW: Download aus INet - fertiger Code gesucht
uiuiui... "Mein Setup enthält mehrere fremde Software, die ich aus urheberrechtlichen Gründen nicht in mein Setup hineinpacken will. Deshalb wird sie "live" aus dem Internet nachgeladen. Das macht die Sache kompliziert und aufwendig."...
Wenn du in deinem Delphiprogramm intern Standard-APIs für den Download nimmst und dann auch noch OS-Calls benutzt um etwas auszuführen (ShellExecute, CreateProcess,...) dann wird deine Software von jeder guten Heuristik der besseren Vierentests erkannt und gesperrt. Allein beim Öffnen einer Download-Seite und dem "manuellem" Laden einer Datei via Standard-WEB-Browser können dir schon Downloadmanager dazwischen funken. Das Laden von Dateien aus fremden Quellen, welche du nicht selbst unter Kontrolle hast, ist für ein Setup schlicht untauglich, denn wenn sich morgen irgendeine externe Quelle ändert bekommst du das auf Dauer niemals immer mit... also funktioniert übermorgen oder wann auch immer dein Setup nicht mehr so wie es mal ging. Wenn schon "portabel", dann richtig "AllInOne & 100%lokal"... dann reicht ein Verzeichnis mit genug Rechten wo genau eine EXE gestartet wird. |
AW: Download aus INet - fertiger Code gesucht
Hallo mensch72.
Deine Einwände helfen zwar nicht, sind aber leider durchaus realistisch. Deshalb frage ich hier, ob jemand bewährten Code hat, der vielleicht schon einige Hürden umschifft. :wink: Zitat:
Ich habe einen Aufsatz für ein fremdes Programm geschrieben, quasi ein Add-on. Weitere fremde Programme werden als Prerequisites benötigt. Nun wäre es mit einem nicht einschätzbarem Aufwand verbunden, dafür die Rechte zum Ausliefern zu bekommen => was ich nicht will. Auch will ich dafür weder die Verantwortung noch den Support übernehmen. Mein Anteil ist lediglich das Add-on. Stell es dir vielleicht vor wie bei einem Java Programm, da würde ich auch nicht die JRE mit ausliefern. :P |
AW: Download aus INet - fertiger Code gesucht
..."Deshalb frage ich hier, ob jemand bewährten Code hat, der vielleicht schon einige Hürden umschifft"...
All das was du "jetzt" suchst, ist die eigentliche "interne" zertifizierte Funktion der bekannten "Installer" (Inno,Wise,...)! Sorry für meine Meinung: - vergiss deinen Ansatz als "Master-Installer" samt GUI als pures Delphi-Programm - entwickle meherere Delphi-DLLs als AddOn/PlugIn für bekannte Standard-Installer (die haben alle ein DLL-API) - mache so wenig wie möglich in den nativ DLLs, nutze die Installerscripts... weil deren Interpreter sind Security geprüft und "bekannt" - zu 99% kannst du per Installerscript+notfalls ein paar nativ DLL Calls all das machen, was du in den letzten Wochen komplett selbst gemacht hast - du glaubst, jetzt fehlen dir nur noch zwei drei Funktionsaufrufe um was aus dem INet zu laden und auszuführen, nur genau da verkennst du aus meiner Sicht die reale Sicherheits-Lage... denn DAS ist es, was die Standardinstaller nach Jahre langer Entwicklung SICHER drin haben! -> sowas mal so nebenbei hier oder sonstwo als fertigen Code ausgehändigt zubekommen... ich glaube es gab mal irgendwo gute Berichte/Analysen zu (bösen) MalWare Installern, welche sogut waren, das sie nur bei Realinstallationen und nicht bei VirtuellenMaschinen ihren Werbemist nachgeladen haben... dort wurden ein paar funktionierende Nachlademechanismen ganz gut beschrieben... mein TIP: lass es und nutze Standardinstaller, welche du nur für GUI und lokale nativ Sachen per DLL erweiterst! |
AW: Download aus INet - fertiger Code gesucht
Danke für deine Infos und deine Meinung! Ich werde es mir ansehen.
Guido. |
AW: Download aus INet - fertiger Code gesucht
@mensch72
Ich habe mir Inno Setup gerade kurz angesehen und konnte außer dem Generieren von anklickbaren Download-Links keine großartigen Download Fähigkeiten entdecken. Wahrscheinlich im Prinzip wie TLinkLabels. ... Wenn ich mit Inno Setup bei Null anfangen würde, dann würde es mindestens nochmals ein paar Wochen dauern, bis ich etwas habe. Und ob dann die Dinge damit alle umgesetzt werden können, die benötigt werden, kann ich vielleicht erst erkennen, wenn es nicht weiter geht. Kennst du dich damit aus und kannst mir dabei helfen? Ansonsten ist mir das zu heikel, wenn ich nicht mal weiß, ob überhaupt alles umsetzbar ist. :cry: Nachtrag: Scheinbar habe ich mich geirrt bezüglich der Download-Fähigkeiten. Es gibt Plugins wie das " ![]() |
AW: Download aus INet - fertiger Code gesucht
Da hier TIdHTTP empohlen wurde: Würde ich nicht mehr benutzen, v.a. nicht mehr Plattform übergreifend, für SSL braucht man da zusätzlich OpenSSL.
Die Alternative bessere TNetHTTPClient nutzt die jeweilige Betriebssystem-SSL-Implementierung, deutlich einfacher und v.a. unterstützt auch alle neuen SSL-Protokolle. Aber generell würde auch ich für das grundlegende Problem auch zu InnoSetup tendieren und den Mehraufwand in Kauf nehmen. |
AW: Download aus INet - fertiger Code gesucht
Zitat:
Leider ist es mir nicht gelungen, Delphi-Code zu finden, der auch nur eine einzige Datei (ca. 5 MB) downloaded. Das Meiste ist aus den frühen 2000ern! Die Codes sind entweder nicht zum Laufen zu bringen (lassen sich nicht kompilieren, weil alles veraltet ist), oder sie laden von den 5 MB nur 40 KB runter. Aktuelle Codes scheint es nicht zu geben. Hast du ein Code Beispiel für TNetHTTPClient? |
AW: Download aus INet - fertiger Code gesucht
Zitat:
Delphi-Quellcode:
DownloadURL1.Execute;
Ach verdammt, ich wollte ja keinen fertigen Code posten. Dann mach ich's hier besser: Zitat:
![]() |
AW: Download aus INet - fertiger Code gesucht
Zitat:
|
AW: Download aus INet - fertiger Code gesucht
Google-Suche, erster Treffer:
![]() |
AW: Download aus INet - fertiger Code gesucht
Die einfachste Variante, wenn man nur eine Datei herunterlädt (läuft bei mir in sowieso in einem Thread, daher geht auch die Fortschrittsanzeige und der direkte Aufruf von ohne get an TNetHTTPClient):
Delphi-Quellcode:
Ob Du ein OnAuthEvent oder ProxySettings benötigst hängt an der jeweiligen Konfiguration, wahrscheinlich eher nein und man kommt natürlich auch ohne OnReceiveData aus).
var httpClient: TNetHTTPClient;
ms:TStream; begin httpClient:=TNetHTTPClient.create(nil); try httpClient.OnAuthEvent:=NetHTTPClientAuthEvent; httpClient.OnReceiveData:=NetHTTPClientReceiveData; httpClient.ConnectionTimeout:=60000; httpClient.ProxySettings := TProxySettings.Create(xxx,yyy); ms:=TFileStream.Create(localFileName,fmCreate or fmOpenReadWrite); try httpClient.Get('https://'+remoteFileName,ms); finally ms.Free(); end; finally httpClient.free(); end; procedure TForm.NetHTTPClientAuthEvent(const Sender: TObject; AnAuthTarget: TAuthTargetType; const ARealm, AURL: string; var AUserName, APassword: string; var AbortAuth: Boolean; var Persistence: TAuthPersistenceType); begin AUserName:=xxx; APassword:=yyy; end; procedure TForm.NetHTTPClientReceiveData(const Sender: TObject; AContentLength, AReadCount: Int64; var Abort: Boolean); begin //todo: Fortschrittsanzeige end; |
AW: Download aus INet - fertiger Code gesucht
@philipp.hofmann
Dein Code hat mir den Einstieg ermöglicht. Ich bin nun in der Lage, eine Datei herunterzuladen, eine Fortschrittsanzeige zu zeigen und einen laufenden Download abzubrechen. Vielen Dank für deine Hilfe! :thumb: |
AW: Download aus INet - fertiger Code gesucht
Guten Morgen, folgender Kode hat mir immer brav gedient, allerdings ohne Https Unterstützung.
Delphi-Quellcode:
(*
Simples Http-Get Beispiel, hier steht nur das dürftigste drinnen, sollte aber dennoch recht verständlich sein. Hierbei bleibt das Kompilat relativ schlank da alles nativ abläuft. *) // ************* Header {$IFNDEF MSWindows} {$MESSAGE ERROR 'This program/unit is made for Windows only!'} {$ENDIF MSWindows} {$IF CompilerVersion >= 23} {$DEFINE NameSpace} {$IFEND CompilerVersion} // ************* Uses uses {$IFDEF NameSpace} Winapi.Classes, Winapi.WinInet; {$ELSE NameSpace} Classes, WinInet; {$ENDIF NameSpace} // ************* Methode procedure HttpGet(const Url: string; Data: TStream); const BuffSize = 1024 * 1024; var hInter: HINTERNET; UrlHandle: HINTERNET; BytesRead: DWORD; Buffer: Pointer; begin hInter := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if Assigned(hInter) then begin Data.Seek(0, 0); GetMem(Buffer, BuffSize); try UrlHandle := InternetOpenUrl(hInter, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0); if Assigned(UrlHandle) then begin repeat InternetReadFile(UrlHandle, Buffer, BuffSize, BytesRead); if BytesRead > 0 then Data.WriteBuffer(Buffer^, BytesRead); until BytesRead = 0; InternetCloseHandle(UrlHandle); end; finally FreeMem(Buffer); end; InternetCloseHandle(hInter); end end; // ************* Beispiel procedure DoJob; var DataStream: TMemoryStream; begin DataStream := TMemoryStream.Create; try try HttpGet('http://download-adresse.com/Filename.ext', DataStream); if DataStream.Size > 0 then DataStream.SaveToFile('X:\Pfad\Lokal-Filename.ext'); // oder mach halt was anderes mit dem Stream... except on E: exception do ShowMessage(E.Message); end; finally DataStream.Free; end; end; |
AW: Download aus INet - fertiger Code gesucht
Guten Morgen.
Heute komme ich nicht mehr dazu, aber morgen werde ich mir den Code ansehen. Vielen Dank! :) |
AW: Download aus INet - fertiger Code gesucht
@KodeZwerg
Ich habe deinen Code ausprobiert. Ich habe ein paar einfache Test durchgeführt, und er funktioniert, wie du gesagt hast, für HTTP, aber nicht für HTTPS. So weit, so gut. Vielen Dank für den Code! :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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-2025 by Thomas Breitkreuz