Я хочу использовать Delphi VCL-компонент TWebBrowser с прокси. Кажется, довольно легко сделать что-то вроде этого:
var PIInfo: PInternetProxyInfo;
begin
PIInfo^.dwAccessType := INTERNET_OPEN_TYPE_PROXY;
PIInfo^.lpszProxy := PAnsiChar('proxyserver.com:8888');
PIInfo^.lpszProxyBypass := PAnsiChar('');
UrlMkSetSessionOption(INTERNET_OPTION_PROXY, PIInfo, SizeOf(Internet_Proxy_Info), 0);
end;
Но я также хотел бы использовать прокси с аутентификацией. И тут у меня случилась беда. Я узнал, что можно установить имя прокси и пароль с помощью функции WinAPI InternetSetOption, пример ниже:
var UserName: AnsiString;
ConnectionHandle: HINTERNET;
begin
// Init ConnectionHandle here
//...
res := InternetSetOption(ConnectionHandle,
INTERNET_OPTION_PROXY_USERNAME,
UserName,
Length(UserName) + 1);
end;
Я узнал, что InternetSetOption с такими параметрами, как INTERNET_OPTION_PROXY_USERNAME, может применяться только к дескриптору Интернета, созданному такими функциями, как InternetConnect или HttpOpenRequest.
Ответ об этом можно найти здесь.
Это не проблема, я могу сначала позвонить в InternetConnect. Но после привязки этого интернет-дескриптора к моему TWebBrowser кажется невозможным. TWebBrowser проигнорирует эти настройки, потому что они применяются к конкретному выделенному дескриптору Интернета.
Итак, мой вопрос: можно ли настроить прокси с аутентификацией в Delphi-коде, чтобы использовать его из TWebBrowser?
ПС. Альтернативным вариантом является запоминание настроек прокси-сервера логина/пароля, когда TWebBrowser запрашивает их, но у меня есть несколько логинов/паролей, поэтому я хотел бы настроить их из кода.
Спасибо заранее.
var IInfo: InternetProxyInfo; begin IInfo.dwAccessType := INTERNET_OPEN_TYPE_PROXY; ... UrlMkSetSessionOption(INTERNET_OPTION_PROXY, @IInfo, SizeOf(IInfo), 0); end;
- person Remy Lebeau   schedule 19.04.2017