Condividi tramite


Metodo IWinHttpRequest::WaitForResponse

Il metodo WaitForResponse attende il completamento di un metodo Send asincrono, con un valore facoltativo di timeout, espresso in secondi.

Sintassi

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

Parametri

Timeout [in, facoltativo]

Valore di timeout, espresso in secondi. Il timeout predefinito è infinito. Per impostare in modo esplicito il timeout su infinito, usare il valore -1.

Operazione completata [out, retval]

Riceve uno dei valori seguenti.

Valore Significato
VARIANT_TRUE
È stata ricevuta una risposta.
VARIANT_FALSE
È stato superato il periodo di timeout specificato.

Valore restituito

Il valore restituito è S_OK in caso di esito positivo o un valore di errore in caso contrario.

Commenti

Questo metodo sospende l'esecuzione durante l'attesa di una risposta a una richiesta asincrona. Questo metodo deve essere chiamato dopo un oggetto Send. Le applicazioni chiamante possono specificare un valore di timeout facoltativo, espresso in secondi. Se si verifica il timeout di questo metodo, la richiesta non viene interrotta. In questo modo, l'applicazione chiamante può continuare ad attendere la richiesta, se necessario, in una chiamata successiva a questo metodo.

La chiamata a questa proprietà dopo che un metodo Send sincrono restituisce immediatamente e non ha alcun effetto.

Nota

Per Windows XP e Windows 2000, vedere la sezione Requisiti di runtime della pagina iniziale di WinHTTP.

Esempio

Nell'esempio seguente viene illustrato come aprire una connessione HTTP asincrona, inviare una richiesta HTTP, attendere la risposta e leggere il testo della risposta.

#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'esempio di scripting seguente illustra come aprire una connessione HTTP asincrona, inviare una richiesta HTTP, attendere una risposta e leggere il testo della risposta.

// 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);

Requisiti

Requisito Valore
Client minimo supportato
Windows XP, Windows 2000 Professional con SP3 [solo app desktop]
Server minimo supportato
Windows Server 2003, Windows 2000 Server con SP3 [solo app desktop]
Componente ridistribuibile
WinHTTP 5.0 e Internet Explorer 5.01 o versione successiva in Windows XP e Windows 2000.
IDL
HttpRequest.idl
Libreria
Winhttp.lib
DLL
Winhttp.dll

Vedi anche

IWinHttpRequest

WinHttpRequest

Open

Versioni di WinHTTP