Partager via


Méthode IWinHttpRequest::WaitForResponse

La méthode WaitForResponse attend qu’une méthode Send asynchrone se termine, avec une valeur de délai d’expiration facultative, en secondes.

Syntaxe

HRESULT WaitForResponse(
  [in, optional] VARIANT      Timeout,
  [out, retval]  VARIANT_BOOL *Succeeded
);

Paramètres

Délai d’expiration [in, facultatif]

Valeur de délai d’expiration, en secondes. Le délai d’attente par défaut est infini. Pour définir explicitement le délai d’attente sur infini, utilisez la valeur -1.

Réussi [out, retval]

Reçoit l’une des valeurs suivantes.

Valeur Signification
VARIANT_TRUE
Une réponse a été reçue.
VARIANT_FALSE
Le délai d’attente spécifié a été dépassé.

Valeur retournée

La valeur de retour est S_OK sur la réussite ou une valeur d’erreur dans le cas contraire.

Notes

Cette méthode interrompt l’exécution en attendant une réponse à une requête asynchrone. Cette méthode doit être appelée après un envoi. Les applications appelantes peuvent spécifier une valeur de délai d’expiration facultative, en secondes. Si cette méthode expire, la demande n’est pas abandonnée. De cette façon, l’application appelante peut continuer à attendre la demande, si vous le souhaitez, dans un appel ultérieur à cette méthode.

L’appel de cette propriété après une méthode Send synchrone retourne immédiatement et n’a aucun effet.

Notes

Pour Windows XP et Windows 2000, consultez la section Conditions d’exécution de la page de démarrage WinHTTP.

Exemples

L’exemple suivant montre comment ouvrir une connexion HTTP asynchrone, envoyer une requête HTTP, attendre la réponse et lire le texte de la réponse.

#include <windows.h>
#include <stdio.h>
#include <objbase.h>

#include "httprequest.h"

#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")

// IID for IWinHttpRequest.
const IID IID_IWinHttpRequest =
{
  0x06f29373,
  0x5c5a,
  0x4b54,
  {0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}
};

int main()
{
    // Variable for return value
    HRESULT    hr;

    // Initialize COM.
    hr = CoInitialize( NULL );

    IWinHttpRequest *  pIWinHttpRequest = NULL;

    BSTR            bstrResponse = NULL;
    VARIANT         varTrue;
    VARIANT         varEmpty;

    CLSID           clsid;

    VariantInit(&varTrue);
    V_VT(&varTrue)   = VT_BOOL;
    V_BOOL(&varTrue) = VARIANT_TRUE;

    VariantInit(&varEmpty);
    V_VT(&varEmpty) = VT_ERROR;

    hr = CLSIDFromProgID(L"WinHttp.WinHttpRequest.5.1", &clsid);

    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(clsid, NULL,
                              CLSCTX_INPROC_SERVER,
                              IID_IWinHttpRequest,
                              (void **)&pIWinHttpRequest);
    }
    if (SUCCEEDED(hr))
    {    // Open WinHttpRequest.
        BSTR bstrMethod  = SysAllocString(L"GET");
        BSTR bstrUrl = SysAllocString(L"https://microsoft.com");
        hr = pIWinHttpRequest->Open(bstrMethod, bstrUrl, varTrue);
        SysFreeString(bstrMethod);
        SysFreeString(bstrUrl);
    }
    if (SUCCEEDED(hr))
    {    // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {    // Wait for response.
        VARIANT_BOOL varResult;
        hr = pIWinHttpRequest->WaitForResponse(varEmpty, &varResult);
    }
    if (SUCCEEDED(hr))
    {    // Get Response text.
        hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
    }
    if (SUCCEEDED(hr))
    {    // Print the response to a console.
        wprintf(L"%.256s",bstrResponse);
    }

    // Release memory.
    if (pIWinHttpRequest)
        pIWinHttpRequest->Release();
    if (bstrResponse)
        SysFreeString(bstrResponse);

    CoUninitialize();
    return 0;
}

L’exemple de script suivant montre comment ouvrir une connexion HTTP asynchrone, envoyer une requête HTTP, attendre une réponse et lire le texte de la réponse.

// Instantiate a WinHttpRequest object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");

// Initialize an HTTP request.  
WinHttpReq.Open("GET", "https://www.microsoft.com", true);

// Send the HTTP request.
WinHttpReq.Send(); 

// Wait for the response.
WinHttpReq.WaitForResponse();

// Display the response text.
WScript.Echo( WinHttpReq.ResponseText);

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows XP, Windows 2000 Professionnel avec SP3 [applications de bureau uniquement]
Serveur minimal pris en charge
Windows Server 2003, Windows 2000 Server avec SP3 [applications de bureau uniquement]
Composant redistribuable
WinHTTP 5.0 et Internet Explorer 5.01 ou version ultérieure sur Windows XP et Windows 2000.
IDL
HttpRequest.idl
Bibliothèque
Winhttp.lib
DLL
Winhttp.dll

Voir aussi

IWinHttpRequest

WinHttpRequest

Ouvrir

WinHTTP Versions