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 呼び出しは、 WinHttpQueryHeadersEx を呼び出す前に読み取られた 0 バイトを返す必要があります。

dwInfoLevel

型: _In_ DWORD

クエリ情報フラグ」トピックに記載されている属性フラグと修飾子フラグの組み合わせを指定する DWORD 型の値。 これらの属性フラグと修飾子フラグは、要求されている情報と、その書式設定方法を示します。

注意

次のフラグを使用すると、WINHTTP_QUERY_VERSIONWINHTTP_QUERY_STATUS_CODEWINHTTP_QUERY_STATUS_TEXTWINHTTP_QUERY_FLAG_NUMBERWINHTTP_QUERY_FLAG_NUMBER64、WINHTTP_QUERY_FLAG_SYSTEMTIMEWINHTTP_QUERY_RAW_HEADERS_CRLFERROR_INVALID_PARAMETERが返されます。

フラグ WINHTTP_QUERY_EX_ALL_HEADERS は、すべてのヘッダーを返します。

すべてのヘッダーに対してクエリを実行していない場合は、特定の既知のヘッダーに対応するフラグを渡すか、pHeaderName パラメーターのヘッダー名の文字列と共にWINHTTP_QUERY_CUSTOMを渡すことができます。

WINHTTP_QUERY_FLAG_WIRE_ENCODING渡すと、ヘッダーがネットワーク経由で送信される形式で返されます (WINHTTP_EXTENDED_HEADER および WINHTTP_HEADER_NAMEpsz* メンバーにアクセス/設定する必要があります)。 ワイヤ エンコード フラグを設定しない場合、既定の動作では Unicode 形式のヘッダーが返されます (WINHTTP_EXTENDED_HEADER および WINHTTP_HEADER_NAMEpwsz* メンバーにアクセス/設定する必要があります)。

ullFlags

型: _In_ ULONGLONG

予約済み。 0 に設定されます。

uiCodePage

型: _In_ UINT

Unicode 変換に使用するコード ページ。 既定の動作 (CP_ACP)、または WINHTTP_QUERY_FLAG_WIRE_ENCODING を使用する場合は 0 を渡す必要があります。 このパラメーターの検証は行われません。

pdwIndex

種類: _INOUT_OPT_ PDWORD

同じ名前の複数のヘッダーを列挙するために使用される 0 から始まるインデックスのアドレス。 関数を呼び出すとき、このパラメーターは、返される指定されたヘッダーのインデックスです。 関数が戻るときに、このパラメーターは次のヘッダーのインデックスです。 NULL を渡して、指定されたヘッダーの最初のインスタンスにアクセスします。

pHeaderName

種類: _Inout_opt_ PWINHTTP_HEADER_NAME

WINHTTP_HEADER_NAME構造体のアドレス。

すべてのヘッダーを取得するときに 、pHeaderNameNULL に 設定します。 このパラメーターが NULL ではなく、dwInfoLevelでWINHTTP_QUERY_CUSTOMを渡すと、WinHttpQueryHeadersEx はこのパラメーターで指定されたヘッダーのみを取得します。 dwInfoLevelでWINHTTP_QUERY_FLAG_WIRE_ENCODINGを渡す場合は、pszName メンバーを使用する必要があります (フラグが設定されていない場合は、pwszName メンバーを使用します)。

pBuffer

型: _Out_writes_bytes_to_opt_(*pdwBufferLength, *pdwBufferLength) LPVOID

解析されたヘッダー ポインターとヘッダーを格納するための呼び出し元から提供されたバッファー。 このパラメーターが NULL または小さすぎる場合、 WinHttpQueryHeadersExERROR_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 文字を含む 1 つのシリアル化された文字列が返されます。 たとえば、"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