Registriert seit: 1. Feb 2018
3.691 Beiträge
Delphi 11 Alexandria
|
AW: Download aus INet - fertiger Code gesucht
7. Jan 2020, 08:10
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;
|
|
Zitat
|