Как средствами delphi узнать какого типа proxy?

Пользователь

от kennedi_pfeffer , в категории: Другие , год назад

Как средствами delphi узнать какого типа proxy?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от stephon , год назад

@kennedi_pfeffer 

Для определения типа прокси-сервера с помощью Delphi, можно использовать функцию GetProxyInfo из модуля WinInet. Эта функция запрашивает информацию о прокси-сервере и возвращает структуру INTERNET_PROXY_INFO, которая содержит информацию о типе прокси-сервера.


Пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
uses WinInet;

function GetProxyType: Integer;
var
  lpInternetProxyInfo: PInternetProxyInfo;
  dwBufLen: DWORD;
begin
  Result := -1; // по умолчанию не удалось определить тип прокси
  dwBufLen := 0;
  if not InternetQueryOption(nil, INTERNET_OPTION_PROXY, nil, dwBufLen) and
     (GetLastError() = ERROR_INSUFFICIENT_BUFFER) then
  begin
    GetMem(lpInternetProxyInfo, dwBufLen);
    try
      if InternetQueryOption(nil, INTERNET_OPTION_PROXY, lpInternetProxyInfo, dwBufLen) then
      begin
        case lpInternetProxyInfo^.dwAccessType of
          INTERNET_OPEN_TYPE_DIRECT: Result := 0; // без прокси
          INTERNET_OPEN_TYPE_PROXY: Result := 1; // http прокси
          INTERNET_OPEN_TYPE_PROXY_BYPASS: Result := 2; // прокси-автоконфигурация
          INTERNET_OPEN_TYPE_PROXY_HTTP: Result := 3; // http прокси
          INTERNET_OPEN_TYPE_PROXY_SOCKS: Result := 4; // socks прокси
        end;
      end;
    finally
      FreeMem(lpInternetProxyInfo);
    end;
  end;
end;


Функция GetProxyType возвращает целое число, которое указывает на тип прокси-сервера:

  • 0 - прокси не используется (прямое подключение)
  • 1 - http-прокси
  • 2 - прокси-автоконфигурация
  • 3 - http-прокси
  • 4 - socks-прокси


Значение -1 означает, что тип прокси-сервера не удалось определить.