WinHttpReceiveResponse 関数 (winhttp.h)
WinHttpReceiveResponse 関数は、WinHttpSendRequest によって開始された HTTP 要求への応答の受信を待機します。 WinHttpReceiveResponse が正常に完了すると、状態コードと応答ヘッダーが受信され、アプリケーションが WinHttpQueryHeaders を使用して検査できるようになります。 アプリケーションは、WinHttpQueryDataAvailable と WinHttpReadData を使用して応答エンティティ本文 (存在する場合) にアクセスする前に、WinHttpReceiveResponse を呼び出す必要があります。
構文
WINHTTPAPI BOOL WinHttpReceiveResponse(
[in] HINTERNET hRequest,
[in] LPVOID lpReserved
);
パラメーター
[in] hRequest
WinHttpOpenRequest によって返され、WinHttpSendRequest によって送信される HINTERNET ハンドル。 WinHttpSendRequest がこのハンドルに対して完了するまで待ってから、WinHttpReceiveResponse を呼び出します。
[in] lpReserved
このパラメーターは予約済みであり、 NULL である必要があります。
戻り値
成功した場合は TRUE 、それ以外の場合 は FALSE を 返します。 拡張エラー情報については、 GetLastError を呼び出します。 返されるエラー コードの中には、次のエラー コードがあります。
エラー コード | 説明 |
---|---|
|
サーバーへの接続に失敗した場合に返されます。 |
|
チャンク エンコードの解析中にオーバーフロー条件が発生したときに返されます。 |
|
サーバーがクライアント認証を要求したときに返されます。 |
|
サーバーとの接続がリセットまたは終了されたか、互換性のない SSL プロトコルが検出されました。 たとえば、WinHTTP バージョン 5.1 では、クライアントで明示的に有効にしない限り、SSL2 はサポートされません。 |
|
WinHTTP が受信できるヘッダーよりも多くのヘッダーが応答に存在する場合に返されます。 |
|
受信したヘッダーのサイズが要求ハンドルの制限を超えたときに WinHttpReceiveResponse によって返されます。 |
|
指定されたハンドルが正しい状態でないため、要求された操作を実行できません。 |
|
指定されたハンドルの種類がこの操作に対して正しくありません。 |
|
内部エラーが発生しました。 |
|
サーバー応答を解析できませんでした。 |
|
URL が無効です。 |
|
ログイン試行が失敗しました。 このエラーが発生した場合、要求ハンドルは WinHttpCloseHandle で閉じる必要があります。 最初にこのエラーを生成した関数を再試行する前に、新しい要求ハンドルを作成する必要があります。 |
|
サーバー名を解決できませんでした。 |
|
通常、操作が完了する前に要求が操作されていたハンドルが閉じられたため、操作は取り消されました。 |
|
スキームが変更されたか、すべてのリダイレクト試行が失敗したため、リダイレクトに失敗しました (既定値は 5 回です)。 |
|
WinHTTP 関数が失敗しました。 目的の関数は、同じ要求ハンドルで再試行できます。 |
|
受信応答が内部 WinHTTP サイズ制限を超えたときに返されます。 |
|
サーバーから送信された Secure Sockets Layer (SSL) 証明書で、1 つ以上のエラーが見つかりました。 発生したエラーの種類を確認するには、状態コールバック関数でWINHTTP_CALLBACK_STATUS_SECURE_FAILURE通知をチェックします。 詳細については、「 WINHTTP_STATUS_CALLBACK」を参照してください。 |
|
要求がタイムアウトしました。 |
|
URL で、"http:" または "https:" 以外のスキームが指定されました。 |
|
要求された操作を完了するのに十分なメモリが使用できませんでした。 (Windows エラー コード) |
注釈
WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpen でWINHTTP_FLAG_ASYNCが設定されている場合)、この関数は同期的または非同期的に動作できます。 この関数が FALSE を返した場合、この関数は失敗し、 GetLastError を 呼び出して拡張エラー情報を取得できます。 この関数が TRUE を返す場合、アプリケーションは、 WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 完了コールバック (成功を示す) または WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 完了コールバック (操作が非同期的に完了したが失敗したことを示す) を想定する必要があります。
状態コールバック関数が WinHttpSetStatusCallback と共にインストールされている場合、WinHttpSetStatusCallback の dwNotificationFlags パラメーターに設定されている次の通知の通知は、応答の受信の進行状況を示します。
- WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
- WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
- WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
- WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
- WINHTTP_CALLBACK_STATUS_REDIRECT
- WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
- WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
例
この例では、HTTP サーバーにデータを書き込むコードを示します。 この例で指定したサーバー名 (www.wingtiptoys.com) は架空のものであり、書き込みアクセス権を持つサーバーの名前に置き換える必要があります。
LPSTR pszData = "WinHttpWriteData Example";
DWORD dwBytesWritten = 0;
BOOL bResults = FALSE;
HINTERNET hSession = NULL,
hConnect = NULL,
hRequest = NULL;
// Use WinHttpOpen to obtain a session handle.
hSession = WinHttpOpen( L"A WinHTTP Example Program/1.0",
WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
WINHTTP_NO_PROXY_NAME,
WINHTTP_NO_PROXY_BYPASS, 0);
// Specify an HTTP server.
if (hSession)
hConnect = WinHttpConnect( hSession, L"www.wingtiptoys.com",
INTERNET_DEFAULT_HTTP_PORT, 0);
// Create an HTTP Request handle.
if (hConnect)
hRequest = WinHttpOpenRequest( hConnect, L"PUT",
L"/writetst.txt",
NULL, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES,
0);
// Send a Request.
if (hRequest)
bResults = WinHttpSendRequest( hRequest,
WINHTTP_NO_ADDITIONAL_HEADERS,
0, WINHTTP_NO_REQUEST_DATA, 0,
(DWORD)strlen(pszData), 0);
// Write data to the server.
if (bResults)
bResults = WinHttpWriteData( hRequest, pszData,
(DWORD)strlen(pszData),
&dwBytesWritten);
// End the request.
if (bResults)
bResults = WinHttpReceiveResponse( hRequest, NULL);
// Report any errors.
if (!bResults)
printf("Error %d has occurred.\n",GetLastError());
// Close any open handles.
if (hRequest) WinHttpCloseHandle(hRequest);
if (hConnect) WinHttpCloseHandle(hConnect);
if (hSession) WinHttpCloseHandle(hSession);
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP、Windows 2000 Professional sp3 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003、Windows 2000 Server SP3 [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winhttp.h |
Library | Winhttp.lib |
[DLL] | Winhttp.dll |
再頒布可能パッケージ | Windows XP および Windows 2000 では、WinHTTP 5.0 およびインターネット エクスプローラー 5.01 以降がインストールされています。 |