Поделиться через


Функция 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

Контекстные данные, которые будут переданы функции обратного вызова завершения.

Возвращаемое значение

Код состояния, указывающий результат операции.

Могут быть возвращены следующие коды. Описание
ERROR_IO_PENDING
Операция продолжается асинхронно.
ERROR_WINHTTP_AUTO_PROXY_SERVICE_ERROR
Возвращается WinHttpGetProxyForUrlEx , если не удается найти прокси-сервер для указанного URL-адреса.
ERROR_WINHTTP_BAD_AUTO_PROXY_SCRIPT
Произошла ошибка при выполнении кода скрипта в файле автоматической настройки прокси-сервера (PAC).
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Для этой операции указан неправильный тип дескриптора.
ERROR_WINHTTP_INVALID_URL
Недопустимый URL-адрес.
ERROR_WINHTTP_OPERATION_CANCELLED
Операция была отменена, как правило, из-за того, что дескриптор, с которым выполнялся запрос, был закрыт до завершения операции.
ERROR_WINHTTP_UNABLE_TO_DOWNLOAD_SCRIPT
Не удалось скачать PAC-файл. Например, сервер, на который ссылается URL-адрес PAC, может быть недоступен, или сервер вернул ответ 404 NOT FOUND.
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
В URL-адресе PAC-файла указана схема, отличаемая от "http:" или "https:".
ERROR_NOT_ENOUGH_MEMORY
Недостаточно памяти для выполнения запрошенной операции. (Код ошибки 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