Перейти к содержимому
Гайды 2 мин чтения 2 просмотров

Использование прокси в Delphi/Pascal

Настройка прокси в Delphi и Free Pascal: Indy, Synapse, WinINet и работа с HTTP/SOCKS5 прокси.

Прокси в Delphi/Pascal

Delphi и Free Pascal остаются популярными для разработки Windows-приложений. Работа с прокси осуществляется через библиотеки Indy (стандарт Delphi), Synapse и WinINet API.

Indy (Internet Direct)

Indy — встроенная библиотека Delphi для сетевого программирования.

HTTP прокси

uses IdHTTP, IdSSLOpenSSL;

procedure FetchViaProxy;
var
  HTTP: TIdHTTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
begin
  HTTP := TIdHTTP.Create(nil);
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  try
    HTTP.IOHandler := SSL;

    // Настройка прокси
    HTTP.ProxyParams.ProxyServer := 'proxy_ip';
    HTTP.ProxyParams.ProxyPort := 8080;
    HTTP.ProxyParams.ProxyUsername := 'username';
    HTTP.ProxyParams.ProxyPassword := 'password';
    HTTP.ProxyParams.BasicAuthentication := True;

    WriteLn(HTTP.Get('https://httpbin.org/ip'));
  finally
    SSL.Free;
    HTTP.Free;
  end;
end;

SOCKS5 прокси через Indy

uses IdHTTP, IdSocks, IdSSLOpenSSL;

procedure FetchViaSocks5;
var
  HTTP: TIdHTTP;
  SSL: TIdSSLIOHandlerSocketOpenSSL;
  Socks: TIdSocksInfo;
begin
  HTTP := TIdHTTP.Create(nil);
  SSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  Socks := TIdSocksInfo.Create(nil);
  try
    // Настройка SOCKS5
    Socks.Host := 'proxy_ip';
    Socks.Port := 1080;
    Socks.Version := svSocks5;
    Socks.Username := 'username';
    Socks.Password := 'password';
    Socks.Authentication := saUsernamePassword;

    SSL.TransparentProxy := Socks;
    HTTP.IOHandler := SSL;

    WriteLn(HTTP.Get('https://httpbin.org/ip'));
  finally
    Socks.Free;
    SSL.Free;
    HTTP.Free;
  end;
end;

SOCKS4

Socks.Version := svSocks4;
// SOCKS4 не поддерживает аутентификацию
Socks.Authentication := saNoAuthentication;

Synapse

Synapse — альтернативная сетевая библиотека для Free Pascal и Delphi.

Установка

Скачайте с synapse.ararat.cz и добавьте в проект.

HTTP прокси

uses httpsend;

procedure FetchViaSynapseProxy;
var
  HTTP: THTTPSend;
begin
  HTTP := THTTPSend.Create;
  try
    HTTP.ProxyHost := 'proxy_ip';
    HTTP.ProxyPort := '8080';
    HTTP.ProxyUser := 'username';
    HTTP.ProxyPass := 'password';

    if HTTP.HTTPMethod('GET', 'https://httpbin.org/ip') then
      WriteLn(HTTP.Document.DataString)
    else
      WriteLn('Error: ', HTTP.ResultCode);
  finally
    HTTP.Free;
  end;
end;

SOCKS через Synapse

uses blcksock;

procedure FetchViaSynapseSocks;
var
  Sock: TTCPBlockSocket;
begin
  Sock := TTCPBlockSocket.Create;
  try
    Sock.SocksIP := 'proxy_ip';
    Sock.SocksPort := '1080';
    Sock.SocksUsername := 'username';
    Sock.SocksPassword := 'password';
    Sock.SocksType := ST_Socks5;

    Sock.Connect('httpbin.org', '80');
    if Sock.LastError = 0 then begin
      Sock.SendString('GET /ip HTTP/1.1' + #13#10 +
                      'Host: httpbin.org' + #13#10 +
                      #13#10);
      WriteLn(Sock.RecvString(10000));
    end;
  finally
    Sock.Free;
  end;
end;

WinINet API (Windows)

Использование системного Windows API:

uses WinInet;

procedure FetchViaWinINet;
var
  hInternet, hConnect: HINTERNET;
  Buffer: array[0..4095] of Char;
  BytesRead: DWORD;
begin
  // Открытие с прокси
  hInternet := InternetOpen(
    'MyApp',
    INTERNET_OPEN_TYPE_PROXY,
    PChar('http://proxy_ip:8080'),
    nil,
    0
  );

  if hInternet <> nil then begin
    // Установка аутентификации прокси
    InternetSetOption(hInternet, INTERNET_OPTION_PROXY_USERNAME,
      PChar('username'), Length('username'));
    InternetSetOption(hInternet, INTERNET_OPTION_PROXY_PASSWORD,
      PChar('password'), Length('password'));

    hConnect := InternetOpenUrl(hInternet,
      'https://httpbin.org/ip', nil, 0,
      INTERNET_FLAG_RELOAD, 0);

    if hConnect <> nil then begin
      InternetReadFile(hConnect, @Buffer, SizeOf(Buffer), BytesRead);
      WriteLn(Copy(Buffer, 1, BytesRead));
      InternetCloseHandle(hConnect);
    end;

    InternetCloseHandle(hInternet);
  end;
end;

Использование системных прокси

hInternet := InternetOpen(
  'MyApp',
  INTERNET_OPEN_TYPE_PRECONFIG,  // использовать системные настройки
  nil,
  nil,
  0
);

Ротация прокси

type
  TProxyInfo = record
    Host: string;
    Port: Integer;
    Username: string;
    Password: string;
  end;

var
  Proxies: array of TProxyInfo;
  ProxyIndex: Integer = 0;

function GetNextProxy: TProxyInfo;
begin
  Result := Proxies[ProxyIndex mod Length(Proxies)];
  Inc(ProxyIndex);
end;

procedure FetchWithRotation(const URL: string);
var
  HTTP: TIdHTTP;
  Proxy: TProxyInfo;
begin
  Proxy := GetNextProxy;
  HTTP := TIdHTTP.Create(nil);
  try
    HTTP.ProxyParams.ProxyServer := Proxy.Host;
    HTTP.ProxyParams.ProxyPort := Proxy.Port;
    HTTP.ProxyParams.ProxyUsername := Proxy.Username;
    HTTP.ProxyParams.ProxyPassword := Proxy.Password;

    try
      WriteLn(HTTP.Get(URL));
    except
      on E: Exception do
        WriteLn('Error with proxy ', Proxy.Host, ': ', E.Message);
    end;
  finally
    HTTP.Free;
  end;
end;

Советы

  1. Indy — стандартный выбор для Delphi, поставляется с IDE
  2. Synapse — для Free Pascal и кросс-платформенных проектов
  3. WinINet — для Windows-only приложений, использует системный стек
  4. Для SOCKS используйте Indy TIdSocksInfo или Synapse SocksType
  5. OpenSSL DLL — не забудьте положить libeay32.dll и ssleay32.dll рядом с exe для HTTPS

Заключение

Delphi/Pascal предоставляют зрелые инструменты для работы с прокси. Indy — наиболее полное решение с поддержкой HTTP, SOCKS4, SOCKS5 и аутентификации. Для простых задач на Windows WinINet API — быстрый вариант без внешних зависимостей.

Обновлено: 06.03.2026
Назад к категории

Читайте также

Гайды 1 мин

Настройка прокси в Cypress для E2E-тестирования

Настройка прокси в Cypress: HTTP_PROXY переменные, cy-proxy-middleware и тестирование гео-зависимого контента.

Гайды 1 мин

Как автоматизировать закупку прокси через API

Автоматизация покупки и управления прокси через API провайдеров: интеграция, мониторинг расхода и auto-renewal.

Гайды 1 мин

Создание дашборда мониторинга прокси на Grafana

Пошаговое создание дашборда для мониторинга прокси в Grafana: метрики, Prometheus exporters и alerting.

Гайды 1 мин

Как тестировать прокси перед покупкой

Чеклист тестирования прокси перед покупкой: скорость, стабильность, анонимность, гео и совместимость с целевыми сайтами.

Гайды 1 мин

Как настроить sticky sessions через прокси

Sticky sessions (липкие сессии): сохранение одного IP на протяжении сессии, настройка через провайдера и самостоятельно.

Гайды 1 мин

Использование прокси с Camoufox

Camoufox — модифицированный Firefox для обхода антиботов. Настройка прокси, fingerprint и stealth-режим.

Попробуйте наши прокси

20,000+ прокси в 100+ странах мира