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_PARAMETERWINHTTP_QUERY_VERSIONWINHTTP_QUERY_STATUS_CODEWINHTTP_QUERY_STATUS_TEXTWINHTTP_QUERY_FLAG_NUMBERWINHTTP_QUERY_FLAG_NUMBER64、WINHTTP_QUERY_FLAG_SYSTEMTIMEWINHTTP_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_HEADERpwsz* 成員,並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

呼叫端提供的緩衝區長度。 如果 pBufferNULL 或太小, 則 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]的範圍,因為該範圍超出數位的範圍。

傳回值

指出作業結果的狀態代碼。 傳回的錯誤碼如下。

錯誤碼 描述
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
程式庫 Winhttp.lib
Dll Winhttp.dll