Функция 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]
, так как это выходит за пределы массива.
Возвращаемое значение
Код состояния, указывающий результат операции. Среди возвращаемых кодов ошибок приведены следующие.
Код ошибки | Описание |
---|---|
|
Не удалось найти запрошенный заголовок. |
|
Запрошенная операция не может быть выполнена, так как предоставленный дескриптор находится в неправильном состоянии. |
|
Для этой операции указан неправильный тип дескриптора. |
|
Произошла внутренняя ошибка. |
|
Недостаточно памяти для выполнения запрошенной операции. (Код ошибки 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 |