Método IWinHttpRequest::SetRequestHeader

El método SetRequestHeader agrega, cambia o elimina un encabezado de solicitud HTTP.

Sintaxis

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

Parámetros

Encabezado [in]

Especifica el nombre del encabezado que se va a establecer, por ejemplo, "profundidad". Este parámetro no debe contener dos puntos y debe ser el texto real del encabezado HTTP.

Valor [in]

Especifica el valor del encabezado, por ejemplo, "infinity".

Valor devuelto

El valor devuelto se S_OK si se ejecuta correctamente o un valor de error de lo contrario.

Comentarios

Los encabezados se transfieren entre redireccionamientos. Esto puede crear una vulnerabilidad de seguridad. Para evitar que se transfieran encabezados si se produce una redirección, use la devolución de llamada WINHTTP_STATUS_CALLBACK para corregir los encabezados específicos cuando se produce una redirección.

El método SetRequestHeader permite que la aplicación que realiza la llamada agregue o elimine un encabezado de solicitud HTTP antes de enviar la solicitud. El nombre del encabezado se da en Header y el token o valor de encabezado se da en Value. Para agregar un encabezado, proporcione un nombre y un valor de encabezado. Si ya existe otro encabezado con este nombre, se reemplaza. Para eliminar un encabezado, establezca Header en el nombre del encabezado que se va a eliminar y establezca Value en NULL.

Se validan el nombre y el valor de los encabezados de solicitud agregados con este método. Los encabezados deben estar bien formados. Para obtener más información sobre los encabezados HTTP válidos, consulte RFC 2616. Si se usa un encabezado no válido, se produce un error y no se agrega el encabezado.

Nota:

Para Windows XP y Windows 2000, consulte la sección Requisitos en tiempo de ejecución de la página de inicio de WinHTTP.

Ejemplos

En el ejemplo siguiente se muestra cómo abrir una conexión HTTP, establecer un encabezado de solicitud, enviar una solicitud HTTP y leer el texto de la respuesta. Este ejemplo debe ejecutarse desde un símbolo del sistema.

#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;
}

En el siguiente ejemplo de scripting se muestra cómo abrir una conexión HTTP, establecer un encabezado de solicitud y enviar una solicitud 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();

Requisitos

Requisito Value
Cliente mínimo compatible
Windows XP, Windows 2000 Professional con SP3 [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2003, Windows 2000 Server con SP3 [solo aplicaciones de escritorio]
Redistribuible
WinHTTP 5.0 e Internet Explorer 5.01 o posterior en Windows XP y Windows 2000.
IDL
HttpRequest.idl
Biblioteca
Winhttp.lib
Archivo DLL
Winhttp.dll

Consulte también

IWinHttpRequest

WinHttpRequest

Versiones winHTTP