Partager via


IWinHttpRequest::SetTimeouts, méthode

La méthode SetTimeouts spécifie les composants individuels du délai d’attente d’une opération d’envoi/réception, en millisecondes.

Syntaxe

HRESULT SetTimeouts(
  [in] long ResolveTimeout,
  [in] long ConnectTimeout,
  [in] long SendTimeout,
  [in] long ReceiveTimeout
);

Paramètres

ResolveTimeout [in]

Valeur de délai d’attente appliquée lors de la résolution d’un nom d’hôte (tel que www.microsoft.com) à une adresse IP (par exemple, 192.168.131.199), en millisecondes. La valeur par défaut est zéro, ce qui signifie qu’il n’y a pas de délai d’attente (infini). Si le délai d’expiration DNS est spécifié à l’aide de NAME_RESOLUTION_TIMEOUT, il y a une surcharge d’un thread par demande.

ConnectTimeout [in]

Valeur de délai d’attente appliquée lors de l’établissement d’un socket de communication avec le serveur cible, en millisecondes. La valeur par défaut est 60,000 (60 secondes).

SendTimeout [in]

Valeur de délai d’attente appliquée lors de l’envoi d’un paquet individuel de données de requête sur le socket de communication au serveur cible, en millisecondes. Une requête volumineuse envoyée à un serveur HTTP est normalement divisée en plusieurs paquets ; le délai d’attente d’envoi s’applique à l’envoi de chaque paquet individuellement. La valeur par défaut est 30 000 (30 secondes).

ReceiveTimeout [in]

Valeur de délai d’attente appliquée lors de la réception d’un paquet de données de réponse du serveur cible, en millisecondes. Les réponses volumineuses sont divisées en plusieurs paquets ; Le délai d’attente de réception s’applique à l’extraction de chaque paquet de données du socket. La valeur par défaut est 30 000 (30 secondes).

Valeur retournée

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

Notes

Tous les paramètres sont obligatoires. La valeur 0 ou -1 définit un délai d’attente infini. Une valeur supérieure à 0 définit la valeur du délai d’attente en millisecondes. Par exemple, 30 000 définissent le délai d’attente sur 30 secondes. Toutes les valeurs négatives autres que -1 entraînent l’échec de cette méthode.

Les valeurs de délai d’attente sont appliquées à la couche Winsock.

Notes

Pour Windows XP et Windows 2000, consultez la section Conditions requises pour l’exécution de la page de démarrage WinHttp.

Exemples

L’exemple suivant montre comment définir tous les délais d’attente WinHTTP sur 30 secondes, ouvrir une connexion HTTP, envoyer une requête HTTP 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         varFalse;
    VARIANT         varEmpty;

    CLSID           clsid;

    VariantInit(&varFalse);
    V_VT(&varFalse)   = VT_BOOL;
    V_BOOL(&varFalse) = VARIANT_FALSE;

    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))
    {    // Set Time-outs.
        hr = pIWinHttpRequest->SetTimeouts(30000, 30000,
                                           30000, 30000);
    }
    if (SUCCEEDED(hr))
    {    // Open WinHttpRequest.
        BSTR bstrMethod  = SysAllocString(L"GET");
        BSTR bstrUrl = SysAllocString(L"https://microsoft.com");
        hr = pIWinHttpRequest->Open(bstrMethod,
                                    bstrUrl,
                                    varFalse);
        SysFreeString(bstrMethod);
        SysFreeString(bstrUrl);
    }
    if (SUCCEEDED(hr))
    {    // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {    // Get Response text.
        hr = pIWinHttpRequest->GetAllResponseHeaders(&bstrResponse);
    }
    if (SUCCEEDED(hr))
    {    // Print response to 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 définir tous les délais d’attente WinHTTP sur 30 secondes, ouvrir une connexion HTTP et envoyer une requête HTTP.

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

// Set time-outs. If time-outs are set, they must 
// be set before open.
WinHttpReq.SetTimeouts(30000, 30000, 30000, 30000);

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

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

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

WinHTTP Versions