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 返回的请求句柄。 在调用 WinHttpQueryHeadersEx 之前,此句柄的 WinHttpReceiveResponse 调用必须已完成。 如果要查询预告片,则此句柄的 WinHttpReadData 调用必须在调用 WinHttpQueryHeadersEx 之前返回读取的 0 个字节。

dwInfoLevel

类型:_In_ DWORD

类型为 DWORD 的值,该值指定查询信息标志主题中列出的属性标志和修饰符标志的组合。 这些属性和修饰符标志指示所请求的信息及其格式设置方式。

注意

以下标志返回 ERROR_INVALID_PARAMETER (如果使用): WINHTTP_QUERY_VERSIONWINHTTP_QUERY_STATUS_CODEWINHTTP_QUERY_STATUS_TEXTWINHTTP_QUERY_FLAG_NUMBERWINHTTP_QUERY_FLAG_NUMBER64WINHTTP_QUERY_FLAG_SYSTEMTIMEWINHTTP_QUERY_RAW_HEADERS_CRLF

标志WINHTTP_QUERY_EX_ALL_HEADERS返回所有标头。

如果未查询所有标头,则可以传递对应于特定已知标头的标志,或者可以在 pHeaderName 参数中传递标头名称的字符串WINHTTP_QUERY_CUSTOM

传递WINHTTP_QUERY_FLAG_WIRE_ENCODING将返回标头的格式, (应访问/设置WINHTTP_EXTENDED_HEADERWINHTTP_HEADER_NAME) 的 psz* 成员。 如果未设置线路编码标志,则默认行为是返回 Unicode 格式的标头, (应访问/设置 WINHTTP_EXTENDED_HEADERWINHTTP_HEADER_NAME) 的 pwsz* 成员。

ullFlags

类型:_In_ ULONG

保留。 设置为 0。

uiCodePage

类型:_In_ UINT

用于 Unicode 转换的代码页。 对于默认行为 (CP_ACP) 或在使用 WINHTTP_QUERY_FLAG_WIRE_ENCODING 时,应传入 0。 不会对此参数执行任何验证。

pdwIndex

类型:_Inout_opt_ PDWORD

用于枚举具有相同名称的多个标头的从零开始的索引的地址。 调用 函数时,此参数是要返回的指定标头的索引。 当函数返回时,此参数是下一个标头的索引。 传递 NULL 以访问给定标头的第一个实例。

pHeaderName

类型:_Inout_opt_ PWINHTTP_HEADER_NAME

WINHTTP_HEADER_NAME结构的地址。

检索所有标头时,将 pHeaderName 设置为 NULL 。 如果此参数不为 NULL,并且使用 dwInfoLevel 传递WINHTTP_QUERY_CUSTOM,则 WinHttpQueryHeadersEx 将仅检索此参数指定的标头。 如果使用 dwInfoLevel 传递WINHTTP_QUERY_FLAG_WIRE_ENCODING,则应使用 pszName 成员 (如果未设置标志,则使用 pwszName 成员) 。

pBuffer

类型:_Out_writes_bytes_to_opt_ (*pdwBufferLength、*pdwBufferLength) LPVOID

调用方提供的缓冲区,用于存储分析的标头指针和标头。 如果此参数为 NULL 或太小,则 WinHttpQueryHeadersEx 返回 ERROR_INSUFFICIENT_BUFFER并且 pdwBufferLength 参数包含所需的缓冲区大小(以字节为单位)。

pdwBufferLength

类型:_Inout_ PDWORD

调用方提供的缓冲区的长度。 如果 pBufferNULL 或太小,则 WinHttpQueryHeadersEx 会将所需的缓冲区大小(以字节为单位)写入此参数。

ppHeaders

类型:_Out_writes_opt_ (*pdwHeadersCount) PWINHTTP_EXTENDED_HEADER*

用于访问已分析标头名称/值的 WINHTTP_EXTENDED_HEADER 数组的句柄。 应传入初始化为 NULLWINHTTP_EXTENDED_HEADER指针的地址。 完成后,如果使用 WINHTTP_QUERY_FLAG_WIRE_ENCODING,则应访问 pszName/pszValue 参数,否则应访问 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
标头 winhttp.h
Library Winhttp.lib
DLL Winhttp.dll