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


Функция WinHttpQueryHeadersEx (winhttp.h)

Извлекает сведения о заголовке, связанные с HTTP-запросом; предоставляет способ получения проанализированных имен заголовков и строк значений.

Синтаксис

WINHTTPAPI DWORD WinHttpQueryHeadersEx(
  HINTERNET                hRequest,
  DWORD                    dwInfoLevel,
  ULONGLONG                ullFlags,
  UINT                     uiCodePage,
  PDWORD                   pdwIndex,
  PWINHTTP_HEADER_NAME     pHeaderName,
  PVOID                    pBuffer,
  PDWORD                   pdwBufferLength,
  PWINHTTP_EXTENDED_HEADER *ppHeaders,
  PDWORD                   pdwHeadersCount
);

Параметры

hRequest

Тип: _In_ HINTERNET

Дескриптор запроса, возвращенный WinHttpOpenRequest. Вызов WinHttpReceiveResponse для этого дескриптора должен завершиться перед вызовом WinHttpQueryHeadersEx. Если вы запрашиваете трейлеры, вызов WinHttpReadData для этого дескриптора должен вернуть 0 байт, прочитанных перед вызовом WinHttpQueryHeadersEx.

dwInfoLevel

Тип: _In_ DWORD

Значение типа DWORD , указывающее сочетание флагов атрибутов и модификаторов, перечисленных в разделе Флаги сведений о запросе . Эти флаги атрибутов и модификаторов указывают запрашиваемую информацию и способ их форматирования.

Примечание

При использовании следующие флаги возвращают ERROR_INVALID_PARAMETER : WINHTTP_QUERY_VERSION, WINHTTP_QUERY_STATUS_CODE, WINHTTP_QUERY_STATUS_TEXT, WINHTTP_QUERY_FLAG_NUMBER, WINHTTP_QUERY_FLAG_NUMBER64, WINHTTP_QUERY_FLAG_SYSTEMTIME и WINHTTP_QUERY_RAW_HEADERS_CRLF.

Флаг WINHTTP_QUERY_EX_ALL_HEADERS возвращает все заголовки.

Если вы запрашиваете не все заголовки, можно передать флаг, соответствующий определенному известному заголовку, или передать WINHTTP_QUERY_CUSTOM вместе со строкой для имени заголовка в параметре pHeaderName .

Передача WINHTTP_QUERY_FLAG_WIRE_ENCODING возвращает заголовки в формате, в котором они отправляются по сети (необходимо получить доступ к элементам PSZ*WINHTTP_EXTENDED_HEADER и WINHTTP_HEADER_NAME). Если флаг кодировки не задан, по умолчанию возвращаются заголовки в формате Юникода (необходимо получить доступ к элементам pwsz*WINHTTP_EXTENDED_HEADER и WINHTTP_HEADER_NAME).

ullFlags

Тип: _In_ ULONGLONG

Зарезервировано. Задайте значение 0.

uiCodePage

Тип: _In_ UINT

Кодовая страница, используемая для преобразования в Юникод. Необходимо передать значение 0 для поведения по умолчанию (CP_ACP) или при использовании WINHTTP_QUERY_FLAG_WIRE_ENCODING. Проверка этого параметра не выполняется.

pdwIndex

Тип: _Inout_opt_ PDWORD

Адрес отсчитываемого от нуля индекса, используемого для перечисления нескольких заголовков с одинаковым именем. При вызове функции этот параметр является индексом возвращаемого заголовка. При возврате функции этот параметр является индексом следующего заголовка. Передайте значение NULL для доступа к первому экземпляру заданного заголовка.

pHeaderName

Тип: _Inout_opt_ PWINHTTP_HEADER_NAME

Адрес структуры WINHTTP_HEADER_NAME .

При получении всех заголовков задайте для pHeaderNameзначение NULL . Если этот параметр не имеет значение NULL и вы передаете WINHTTP_QUERY_CUSTOM с помощью dwInfoLevel, WinHttpQueryHeadersEx получит только заголовок, указанный этим параметром. Если вы передаете WINHTTP_QUERY_FLAG_WIRE_ENCODING с помощью dwInfoLevel, следует использовать элемент pszName (если флаг не задан, используйте элемент pwszName ).

pBuffer

Тип: _Out_writes_bytes_to_opt_(*pdwBufferLength, *pdwBufferLength) LPVOID

Буфер, предоставляемый вызывающим объектом, для хранения проанализированных указателей заголовков и заголовков. Если этот параметр имеет значение NULL или слишком мал, WinHttpQueryHeadersEx возвращает ERROR_INSUFFICIENT_BUFFER, а параметр pdwBufferLength содержит требуемый размер буфера в байтах.

pdwBufferLength

Тип: _Inout_ PDWORD

Длина буфера, предоставленного вызывающим объектом. Если pBuffer имеет значение NULL или слишком мало, WinHttpQueryHeadersEx записывает требуемый размер буфера в байтах в этот параметр.

ppHeaders

Тип: _Out_writes_opt_(*pdwHeadersCount) PWINHTTP_EXTENDED_HEADER*

Дескриптор массива WINHTTP_EXTENDED_HEADER для доступа к именам и значениям проанализированных заголовков. Необходимо передать адрес указателя WINHTTP_EXTENDED_HEADER , инициализированного значением NULL. По завершении вы должны получить доступ к параметрам pszName/pszValue , если используется WINHTTP_QUERY_FLAG_WIRE_ENCODING, и pwszName/pwszValue в противном случае.

pdwHeadersCount

Тип: _Out_ PDWORD

Количество возвращаемых заголовков. Не следует пытаться получить доступ за пределами ppHeaders[cHeaders - 1], так как это выходит за пределы массива.

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

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

Код ошибки Описание
ERROR_WINHTTP_HEADER_NOT_FOUND
Не удалось найти запрошенный заголовок.
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
Запрошенная операция не может быть выполнена, так как предоставленный дескриптор находится в неправильном состоянии.
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
Для этой операции указан неправильный тип дескриптора.
ERROR_WINHTTP_INTERNAL_ERROR
Произошла внутренняя ошибка.
ERROR_NOT_ENOUGH_MEMORY
Недостаточно памяти для выполнения запрошенной операции. (Код ошибки Windows)

Комментарии

WinHttpQueryHeadersEx основан на функциональных возможностях WinHttpQueryHeaders. WinHttpQueryHeaders позволяет запрашивать заголовки запросов или ответов (или трейлеры ответов) в виде строки, числа (DWORD) или метки времени (SYSTEMTIME). При запросе ко всем заголовкам возвращается одна сериализованная строка с символами CRLF или NULL, разделяющими разные заголовки. Например, "Name1: value1\r\nName2: value2\r\n\r\n". Или "Name1: value1\0Name2: value2\0\0". Двойный разделитель используется для указания конца строки.

WinHttpQueryHeadersEx позволяет получить проанализированные строки имени и значения заголовка.

Требования

Требование Значение
Минимальная версия клиента сборка Windows 10 20348
Минимальная версия сервера сборка Windows 10 20348
Целевая платформа Windows
Header winhttp.h
Библиотека Winhttp.lib
DLL Winhttp.dll