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_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返回所有标头。
如果未查询所有标头,则可以传递对应于特定已知标头的标志,或者可以在 pHeaderName 参数中传递标头名称的字符串WINHTTP_QUERY_CUSTOM。
传递WINHTTP_QUERY_FLAG_WIRE_ENCODING将返回标头的格式, (应访问/设置WINHTTP_EXTENDED_HEADER和WINHTTP_HEADER_NAME) 的 psz* 成员。 如果未设置线路编码标志,则默认行为是返回 Unicode 格式的标头, (应访问/设置 WINHTTP_EXTENDED_HEADER 和 WINHTTP_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
调用方提供的缓冲区的长度。 如果 pBuffer 为 NULL 或太小,则 WinHttpQueryHeadersEx 会将所需的缓冲区大小(以字节为单位)写入此参数。
ppHeaders
类型:_Out_writes_opt_ (*pdwHeadersCount) PWINHTTP_EXTENDED_HEADER*
用于访问已分析标头名称/值的 WINHTTP_EXTENDED_HEADER 数组的句柄。 应传入初始化为 NULL 的WINHTTP_EXTENDED_HEADER指针的地址。 完成后,如果使用 WINHTTP_QUERY_FLAG_WIRE_ENCODING,则应访问 pszName/pszValue 参数,否则应访问 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 |
标头 | winhttp.h |
Library | Winhttp.lib |
DLL | Winhttp.dll |