Einzelnen Beitrag anzeigen

Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Download aus INet - fertiger Code gesucht

  Alt 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;
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat