Настройка конфигураций прокси-сервера WinINet в WinHTTP

Настройка автоматического прокси-сервера в WinHTTP 5.1

Приложениям, которые переносятся из WinINet в WinHTTP, может потребоваться использовать те же параметры автопрокси, которые можно получить в WinINet или Internet Обозреватель (IE). API WinHTTP версии 5.1 может извлекать и использовать эти параметры прокси-сервера. Как правило, WinHTTP указывает прокси-серверы и серверы обхода прокси-сервера для каждого сеанса при создании сеанса. Эти параметры можно переопределить по запросу.

Чтобы использовать ту же конфигурацию прокси-сервера, что и WinINet или IE, клиент WinHTTP должен задать параметры прокси-сервера для сеанса. Кроме того, если IE или WinINet настроены для использования автоматического обнаружения веб-прокси (WPAD), клиент WinHTTP, использующий эти параметры, должен устанавливать параметры прокси-сервера на основе каждого запроса. В следующих разделах описывается, как указать параметры прокси-сервера для сеанса и запроса.

Настройка конфигурации прокси-сервера в сеансе

Приложение выполняется в учетной записи пользователя

Перед созданием сеанса приложение вызывает WinHttpGetIEProxyConfigForCurrentUser , чтобы получить параметры прокси-сервера IE. Чтобы получить эти параметры, приложение должно выполняться от имени учетной записи пользователя. Параметр pProxyConfig является указателем на структуру WINHTTP_CURRENT_USER_IE_PROXY_CONFIG , содержащую прокси-серверы (lpszProxy) и прокси-серверы обхода (lpszProxyBypass). Затем имя прокси-сервера и значения обхода прокси-сервера структуры WINHTTP_CURRENT_USER_IE_PROXY_CONFIG используются для инициализации сеанса WinHTTP. Сеанс инициализируется путем вызова WinHttpOpen с параметрами pwszProxyName и pwszProxyBypass , полученными из членов lpszProxy и lpszProxyBypass структуры WINHTTP_CURRENT_USER_IE_PROXY_CONFIG .

Приложение выполняется как услуга

Приложение должно убедиться, что параметры реестра для отдельного пользователя загружены в реестр перед вызовом WinHttpGetIEProxyConfigForCurrentUser. Если эти параметры не загружены в реестр, WinHttpGetIEProxyConfigForCurrentUser не сможет получить параметры прокси-сервера. Параметры реестра для отдельного пользователя можно загрузить в реестр, вызвав функцию LoadUserProfile . Если загрузка параметров реестра пользователя не является вариантом, приложение может вызвать WinHttpOpen с WINHTTP_ACCESS_TYPE_DEFAULT_PROXY , указанным в параметре dwAcessType . При указании прокси-сервера по умолчанию в вызове WinHttpOpen API WinHTTP требуется получить набор конфигурации прокси-сервера с помощью служебной программы WinHTTPproxycfg.exe . После загрузки параметров реестра для отдельного пользователя приложение выполняет действия, описанные в разделе Приложение выполняется в учетной записи пользователя , чтобы задать имя прокси-сервера и серверы обхода прокси-сервера.

Настройка конфигурации прокси-сервера в одном запросе

Перед созданием сеанса приложение вызывает WinHttpGetIEProxyConfigForCurrentUser , чтобы определить, настроены ли WinINet и IE для использования WPAD. WinHttpGetIEProxyConfigForCurrentUser возвращает структуру WINHTTP_CURRENT_USER_IE_PROXY_CONFIG , содержащую элемент fAutoDetect . Значение TRUE для этого элемента указывает, что используется WPAD, а член lpszAutoConfigUrl содержит URL-адрес WPAD.

Используется автоматическая конфигурация прокси-сервера

Если используется WPAD, приложение вызывает WinHttpGetProxyForUrl , чтобы получить прокси-сервер для запроса. Параметр lpwszUrl содержит URL-адрес, на который отправляется запрос, а параметр pAutoProxyOptions содержит указатель на структуру (WINHTTP_AUTOPROXY_OPTIONS), содержащую параметры автопрокси. Приложение инициализирует структуру WINHTTP_AUTOPROXY_OPTIONS параметрами, возвращаемыми из структуры WINHTTP_CURRENT_USER_IE_PROXY_CONFIG в вызове WinHttpGetIEProxyConfigForCurrentUser. Флаг WINHTTP_AUTOPROXY_CONFIG_URL указывается в элементе dwFlags структуры WINHTTP_AUTOPROXY_OPTIONS , а член lpszAutoconfigUrl содержит URL-адрес автоматической настройки прокси-сервера из структуры WINHTTP_CURRENT_USER_IE_PROXY_CONFIG . Функция WinHttpGetProxyForUrl возвращает имя прокси-сервера и список обхода прокси-сервера в членах lpszProxy и lpszProxyBypass структуры WINHTTP_PROXY_INFO .

После получения прокси-сервера для запроса из WinHttpGetProxyForUrl приложение создает запрос с помощью WinHttpOpenRequest. Затем вызывается WinHttpSetOption , чтобы задать прокси-сервер для запроса, указав дескриптор запроса в параметре hInternet . Параметру dwOption в вызове WinHttpSetOption должно быть присвоено значение WINHTTP_OPTION_PROXY а параметр lpBuffer является указателем на структуру WINHTTP_PROXY_INFO, содержащую прокси-сервер и обход прокси-сервера, которые будут использоваться для запроса.

Автоматическая настройка прокси-сервера не используется

Если вызов WinHttpGetIEProxyConfigForCurrentUser указывает, что autoproxy не используется, приложение может просто создать запрос с помощью WinHttpOpenRequest. Конфигурация прокси-сервера одинакова для всего сеанса, и изменения для каждого запроса не требуются.