WinHttpReceiveResponse 関数 (winhttp.h)

WinHttpReceiveResponse 関数は、WinHttpSendRequest によって開始された HTTP 要求への応答の受信を待機します。 WinHttpReceiveResponse が正常に完了すると、状態コードと応答ヘッダーが受信され、アプリケーションが WinHttpQueryHeaders を使用して検査できるようになります。 アプリケーションは、WinHttpQueryDataAvailableWinHttpReadData を使用して応答エンティティ本文 (存在する場合) にアクセスする前に、WinHttpReceiveResponse を呼び出す必要があります。

構文

WINHTTPAPI BOOL WinHttpReceiveResponse(
  [in] HINTERNET hRequest,
  [in] LPVOID    lpReserved
);

パラメーター

[in] hRequest

WinHttpOpenRequest によって返され、WinHttpSendRequest によって送信される HINTERNET ハンドル。 WinHttpSendRequest がこのハンドルに対して完了するまで待ってから、WinHttpReceiveResponse を呼び出します。

[in] lpReserved

このパラメーターは予約済みであり、 NULL である必要があります。

戻り値

成功した場合は TRUE 、それ以外の場合 は FALSE を 返します。 拡張エラー情報については、 GetLastError を呼び出します。 返されるエラー コードの中には、次のエラー コードがあります。

エラー コード 説明
ERROR_WINHTTP_CANNOT_CONNECT
サーバーへの接続に失敗した場合に返されます。
ERROR_WINHTTP_CHUNKED_ENCODING_HEADER_SIZE_OVERFLOW
チャンク エンコードの解析中にオーバーフロー条件が発生したときに返されます。
ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
サーバーがクライアント認証を要求したときに返されます。
ERROR_WINHTTP_CONNECTION_ERROR
サーバーとの接続がリセットまたは終了されたか、互換性のない SSL プロトコルが検出されました。 たとえば、WinHTTP バージョン 5.1 では、クライアントで明示的に有効にしない限り、SSL2 はサポートされません。
ERROR_WINHTTP_HEADER_COUNT_EXCEEDED
WinHTTP が受信できるヘッダーよりも多くのヘッダーが応答に存在する場合に返されます。
ERROR_WINHTTP_HEADER_SIZE_OVERFLOW
受信したヘッダーのサイズが要求ハンドルの制限を超えたときに WinHttpReceiveResponse によって返されます。
ERROR_WINHTTP_INCORRECT_HANDLE_STATE
指定されたハンドルが正しい状態でないため、要求された操作を実行できません。
ERROR_WINHTTP_INCORRECT_HANDLE_TYPE
指定されたハンドルの種類がこの操作に対して正しくありません。
ERROR_WINHTTP_INTERNAL_ERROR
内部エラーが発生しました。
ERROR_WINHTTP_INVALID_SERVER_RESPONSE
サーバー応答を解析できませんでした。
ERROR_WINHTTP_INVALID_URL
URL が無効です。
ERROR_WINHTTP_LOGIN_FAILURE
ログイン試行が失敗しました。 このエラーが発生した場合、要求ハンドルは WinHttpCloseHandle で閉じる必要があります。 最初にこのエラーを生成した関数を再試行する前に、新しい要求ハンドルを作成する必要があります。
ERROR_WINHTTP_NAME_NOT_RESOLVED
サーバー名を解決できませんでした。
ERROR_WINHTTP_OPERATION_CANCELLED
通常、操作が完了する前に要求が操作されていたハンドルが閉じられたため、操作は取り消されました。
ERROR_WINHTTP_REDIRECT_FAILED
スキームが変更されたか、すべてのリダイレクト試行が失敗したため、リダイレクトに失敗しました (既定値は 5 回です)。
ERROR_WINHTTP_RESEND_REQUEST
WinHTTP 関数が失敗しました。 目的の関数は、同じ要求ハンドルで再試行できます。
ERROR_WINHTTP_RESPONSE_DRAIN_OVERFLOW
受信応答が内部 WinHTTP サイズ制限を超えたときに返されます。
ERROR_WINHTTP_SECURE_FAILURE
サーバーから送信された Secure Sockets Layer (SSL) 証明書で、1 つ以上のエラーが見つかりました。 発生したエラーの種類を確認するには、状態コールバック関数でWINHTTP_CALLBACK_STATUS_SECURE_FAILURE通知をチェックします。 詳細については、「 WINHTTP_STATUS_CALLBACK」を参照してください。
ERROR_WINHTTP_TIMEOUT
要求がタイムアウトしました。
ERROR_WINHTTP_UNRECOGNIZED_SCHEME
URL で、"http:" または "https:" 以外のスキームが指定されました。
ERROR_NOT_ENOUGH_MEMORY
要求された操作を完了するのに十分なメモリが使用できませんでした。 (Windows エラー コード)

注釈

WinHTTP が非同期モードで使用されている場合 (つまり、WinHttpOpenWINHTTP_FLAG_ASYNCが設定されている場合)、この関数は同期的または非同期的に動作できます。 この関数が FALSE を返した場合、この関数は失敗し、 GetLastError を 呼び出して拡張エラー情報を取得できます。 この関数が TRUE を返す場合、アプリケーションは、 WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE 完了コールバック (成功を示す) または WINHTTP_CALLBACK_STATUS_REQUEST_ERROR 完了コールバック (操作が非同期的に完了したが失敗したことを示す) を想定する必要があります。

状態コールバック関数が WinHttpSetStatusCallback と共にインストールされている場合、WinHttpSetStatusCallbackdwNotificationFlags パラメーターに設定されている次の通知の通知は、応答の受信の進行状況を示します。

  • WINHTTP_CALLBACK_STATUS_RECEIVING_RESPONSE
  • WINHTTP_CALLBACK_STATUS_RESPONSE_RECEIVED
  • WINHTTP_CALLBACK_STATUS_HEADERS_AVAILABLE
  • WINHTTP_CALLBACK_STATUS_INTERMEDIATE_RESPONSE
  • WINHTTP_CALLBACK_STATUS_REDIRECT
サーバーが接続を閉じると、WinHttpSetStatusCallbackdwNotificationFlags パラメーターに設定されている場合、次の通知も報告されます。
  • WINHTTP_CALLBACK_STATUS_CLOSING_CONNECTION
  • WINHTTP_CALLBACK_STATUS_CONNECTION_CLOSED
メモ Windows XP および Windows 2000 の場合は、WinHttp スタート ページの 「ランタイム要件 」セクションを参照してください。
 

この例では、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 以降がインストールされています。

こちらもご覧ください

Microsoft Windows HTTP Services (WinHTTP) について

WinHTTP バージョン

WinHttpCloseHandle

WinHttpOpen

WinHttpOpenRequest

WinHttpSendRequest