Share via


Méthode IWinHttpRequest::SetRequestHeader

La méthode SetRequestHeader ajoute, modifie ou supprime un en-tête de requête HTTP.

Syntaxe

HRESULT SetRequestHeader(
  [in] BSTR Header,
  [in] BSTR Value
);

Paramètres

En-tête [in]

Spécifie le nom de l’en-tête à définir, par exemple, « depth ». Ce paramètre ne doit pas contenir de deux-points et doit être le texte réel de l’en-tête HTTP.

Valeur [in]

Spécifie la valeur de l’en-tête, par exemple, « infinity ».

Valeur retournée

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

Notes

Les en-têtes sont transférés entre les redirections. Cela peut créer une vulnérabilité de sécurité. Pour éviter le transfert d’en-têtes en cas de redirection, utilisez le rappel WINHTTP_STATUS_CALLBACK pour corriger les en-têtes spécifiques lorsqu’une redirection se produit.

La méthode SetRequestHeader permet à l’application appelante d’ajouter ou de supprimer un en-tête de requête HTTP avant d’envoyer la requête. Le nom de l’en-tête est donné dans En-tête, et le jeton ou la valeur d’en-tête est donné dans Valeur. Pour ajouter un en-tête, fournissez un nom et une valeur d’en-tête. S’il existe déjà un autre en-tête portant ce nom, il est remplacé. Pour supprimer un en-tête, définissez En-tête sur le nom de l’en-tête à supprimer et définissez Valeur sur NULL.

Le nom et la valeur des en-têtes de requête ajoutés avec cette méthode sont validés. Les en-têtes doivent être bien formés. Pour plus d’informations sur les en-têtes HTTP valides, consultez RFC 2616. Si un en-tête non valide est utilisé, une erreur se produit et l’en-tête n’est pas ajouté.

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, définir un en-tête de requête, envoyer une requête HTTP et lire le texte de réponse. Cet exemple doit être exécuté à partir d’une invite de commandes.

#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))
    {    // 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))
    {    // Set request header.
        BSTR bstrName  = SysAllocString(L"Date");
        BSTR bstrValue = SysAllocString(L"Fri, 16 Mar 2001 00:25:54 GMT");
        hr = pIWinHttpRequest->SetRequestHeader(bstrName, bstrValue);
        SysFreeString(bstrName);
        SysFreeString(bstrValue);
    }
    if (SUCCEEDED(hr))
    {    // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {    // Get Response headers.
        hr = pIWinHttpRequest->GetAllResponseHeaders(&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, définir un en-tête de requête et envoyer une requête HTTP.

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

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

// Add/replace a request header.
WinHttpReq.SetRequestHeader("Date", Date());

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