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 會傳回所有標頭。
如果您未查詢所有標頭,則可以傳遞對應至特定已知標頭的旗標,也可以傳遞 WINHTTP_QUERY_CUSTOM 以及 pHeaderName 參數中標頭名稱的字串。
傳遞WINHTTP_QUERY_FLAG_WIRE_ENCODING會以透過網路傳送標頭的格式傳回標頭, (您應該存取/設定WINHTTP_EXTENDED_HEADER的 psz* 成員,並WINHTTP_HEADER_NAME) 。 如果您未設定網路編碼旗標,則預設行為是傳回 Unicode 格式的標頭, (您應該存取/設定 WINHTTP_EXTENDED_HEADER 的 pwsz* 成員,並WINHTTP_HEADER_NAME) 。
ullFlags
類型:_In_ ULONGLONG
保留的。 設定為 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 |
程式庫 | Winhttp.lib |
Dll | Winhttp.dll |