Функция WinHttpGetProxyForUrlEx (winhttp.h)
Функция WinHttpGetProxyForUrlEx извлекает данные прокси-сервера для указанного URL-адреса.
Синтаксис
WINHTTPAPI DWORD WinHttpGetProxyForUrlEx(
[in] HINTERNET hResolver,
[in] PCWSTR pcwszUrl,
[in] WINHTTP_AUTOPROXY_OPTIONS *pAutoProxyOptions,
[in] DWORD_PTR pContext
);
Параметры
[in] hResolver
Дескриптор сопоставителя WinHTTP, возвращаемый функцией WinHttpCreateProxyResolver .
[in] pcwszUrl
Указатель на строку Юникода, завершающуюся null, которая содержит URL-адрес, для которого будут определены сведения о прокси-сервере.
[in] pAutoProxyOptions
Указатель на структуру WINHTTP_AUTOPROXY_OPTIONS , указывающую параметры автоматического прокси-сервера.
[in] pContext
Контекстные данные, которые будут переданы функции обратного вызова завершения.
Возвращаемое значение
Код состояния, указывающий результат операции.
Могут быть возвращены следующие коды. | Описание |
---|---|
|
Операция продолжается асинхронно. |
|
Возвращается WinHttpGetProxyForUrlEx , если не удается найти прокси-сервер для указанного URL-адреса. |
|
Произошла ошибка при выполнении кода скрипта в файле автоматической настройки прокси-сервера (PAC). |
|
Для этой операции указан неправильный тип дескриптора. |
|
Недопустимый URL-адрес. |
|
Операция была отменена, как правило, из-за того, что дескриптор, с которым выполнялся запрос, был закрыт до завершения операции. |
|
Не удалось скачать PAC-файл. Например, сервер, на который ссылается URL-адрес PAC, может быть недоступен, или сервер вернул ответ 404 NOT FOUND. |
|
В URL-адресе PAC-файла указана схема, отличаемая от "http:" или "https:". |
|
Недостаточно памяти для выполнения запрошенной операции. (Код ошибки Windows) |
Комментарии
Эта функция реализует протокол автоматического обнаружения веб-прокси (WPAD) для автоматической настройки параметров прокси-сервера для HTTP-запроса. Протокол WPAD скачивает файл автоматической настройки прокси-сервера (PAC), который представляет собой скрипт, который определяет прокси-сервер, используемый для заданного целевого URL-адреса. PAC-файлы обычно развертываются ИТ-отделом в среде корпоративной сети. URL-адрес PAC-файла можно указать явным образом или указать WinHttpGetProxyForUrlEx для автоматического обнаружения расположения PAC-файла в локальной сети.
WinHttpGetProxyForUrlEx поддерживает только PAC-файлы на основе ECMAScript.
WinHttpGetProxyForUrlEx должен вызываться для каждого URL-адреса, так как PAC-файл может возвращать другой прокси-сервер для разных URL-адресов. Это полезно, поскольку PAC-файл позволяет ИТ-отделу реализовать балансировку нагрузки прокси-сервера путем сопоставления (хэширования) целевого URL-адреса (указанного параметром lpcwszUrl ) с определенным прокси-сервером в массиве прокси-серверов.
WinHttpGetProxyForUrlEx кэширует URL-адрес autoproxy и скрипт autoproxy, если автообнаружение указано в элементе dwFlags структуры pAutoProxyOptions . Дополнительные сведения см. в разделе Кэш autoproxy.
WinHttpGetProxyForUrlEx предоставляет полностью асинхронный и отменяемый API, который не поддерживает WinHttpGetProxyForUrl . WinHttpGetProxyForUrlEx также предоставляет приложению полный список прокси-серверов, возвращенный скриптом PAC, что позволяет приложению лучше обрабатывать отработку отказа на direct и при необходимости понимать SOCKS.
WinHttpGetProxyForUrlEx всегда выполняется асинхронно и немедленно возвращается с ERROR_IO_PENDING при успешном выполнении. Обратный вызов задается путем вызова WinHttpSetStatusCallback для hSession , предоставляемого WinHttpOpen. Кроме того, можно вызвать WinHttpSetStatusCallback в hResolver , предоставленном WinHttpCreateProxyResolver , чтобы иметь конкретный обратный вызов для каждого вызова.
Необходимо вызвать WinHttpSetStatusCallback перед WinHttpCreateProxyResolver. При вызове WinHttpSetStatusCallback используйте WINHTTP_CALLBACK_FLAG_REQUEST_ERROR | WINHTTP_CALLBACK_FLAG_GETPROXYFORURL_COMPLETE. Сведения об использовании обратного вызова см. в WINHTTP_STATUS_CALLBACK .
После возврата обратного вызова состояния WINHTTP_CALLBACK_STATUS_GETPROXYFORURL_COMPLETE приложение может вызвать WinHttpGetProxyResult для дескриптора сопоставителя, используемого для выдачи WinHttpGetProxyForUrlEx , чтобы получить результаты этого вызова.
Если вызов завершается сбоем после возврата ERROR_IO_PENDING будет выдан обратный вызов WINHTTP_CALLBACK_STATUS_REQUEST_ERROR .
Эта функция всегда выполняется вне процесса.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 [только классические приложения] |
Минимальная версия сервера | Windows Server 2012 [только классические приложения] |
Целевая платформа | Windows |
Header | winhttp.h |
Библиотека | Winhttp.lib |
DLL | Winhttp.dll |