Condividi tramite


Metodo IWinHttpRequest::SetRequestHeader

Il metodo SetRequestHeader aggiunge, modifica o elimina un'intestazione di richiesta HTTP.

Sintassi

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

Parametri

Intestazione [in]

Specifica il nome dell'intestazione da impostare, ad esempio "depth". Questo parametro non deve contenere due punti e deve essere il testo effettivo dell'intestazione HTTP.

Valore [in]

Specifica il valore dell'intestazione, ad esempio "infinity".

Valore restituito

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

Commenti

Le intestazioni vengono trasferite tra i reindirizzamenti. In questo modo è possibile creare una vulnerabilità di sicurezza. Per evitare il trasferimento di intestazioni se si verifica un reindirizzamento, usare il callback WINHTTP_STATUS_CALLBACK per correggere le intestazioni specifiche quando si verifica un reindirizzamento.

Il metodo SetRequestHeader consente all'applicazione chiamante di aggiungere o eliminare un'intestazione di richiesta HTTP prima di inviare la richiesta. Il nome dell'intestazione viene specificato in Intestazione e il token o il valore dell'intestazione è specificato in Valore. Per aggiungere un'intestazione, specificare un nome e un valore di intestazione. Se esiste già un'altra intestazione con questo nome, viene sostituita. Per eliminare un'intestazione, impostare Intestazione sul nome dell'intestazione per eliminare e impostare Valore su NULL.

Il nome e il valore delle intestazioni di richiesta aggiunti con questo metodo vengono convalidati. Le intestazioni devono essere ben formate. Per altre informazioni sulle intestazioni HTTP valide, vedere RFC 2616. Se viene utilizzata un'intestazione non valida, si verifica un errore e l'intestazione non viene aggiunta.

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, impostare un'intestazione di richiesta, inviare una richiesta HTTP e leggere il testo della risposta. Questo esempio deve essere eseguito da un prompt dei comandi.

#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'esempio di scripting seguente illustra come aprire una connessione HTTP, impostare un'intestazione di richiesta e inviare una richiesta 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();

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

Versioni di WinHTTP