Заметки · 13.10.2023

Скачайте это немедленно

Бытует мнение, что для скачивания файла из сети Интернет (особенно с узлов на https) в проектах IDE Lazarus нужно обязательно использовать какие-то внешние библиотеки. Это далеко не так.

Пост про скачивание файлов с использованием внешних библиотек.

В изкоробочный состав среды разработки входят модули opensslsockets (для https предполагается наличие файлов libeay32.dll и ssleay32.dll) и fphttpclient (документация), с помощью которых можно спокойно скачивать файлы по прямой ссылке.

Сведения и размещение модулей:

Например, вот логическая функция скачивания файла:

uses ..., windows, opensslsockets, fphttpclient, wininet, ...;

function GetFile(url,filename:string):boolean;
var
  download: TFPHTTPClient;
  contypes: DWORD;
  status: boolean;
begin
  contypes:=INTERNET_CONNECTION_MODEM
            + INTERNET_CONNECTION_LAN
            + INTERNET_CONNECTION_PROXY;
  status:=InternetGetConnectedState(@contypes, 0);
  if status=True then
  try
     download:=TFPHTTPClient.Create(Nil);
     download.Get(url,filename);
     download.Free;
     result:=True;
  except result:=False;
  end
  else result:=False;
end;

Прежде чем ломиться по заданной ссылке, функция GetFile проверяет наличие соединения с сетью Интернет. Разумеется, что это всё будет работать только в оконной операционной системе из-за привязки к Windows API, а конкретно к функции InternetGetConnectedState.

Пример использования GetFile:

uses ..., Dialogs, ...;

ShowMessage(BooltoStr(GetFile('https://site/file.format','file.format'), True));

Настоятельно рекомендую подобным методом скачивать только маленькие файлы или вызывать данную функцию в отдельном потоке.

При отсутствии библиотек SSL предлагаю взглянуть на этот модуль.