IWinHttpRequest::SetRequestHeader 方法

SetRequestHeader 方法添加、更改或删除 HTTP 请求标头。

语法

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

parameters

标头 [in]

指定要设置的标头的名称,例如“depth”。 此参数不应包含冒号,并且必须是 HTTP 标头的实际文本。

[in]

指定标头的值,例如“infinity”。

返回值

返回值在成功 时S_OK ,否则返回值为错误值。

备注

标头跨重定向传输。 这会产生安全漏洞。 若要避免在发生重定向时传输标头,请使用 WINHTTP_STATUS_CALLBACK 回调在发生重定向时更正特定标头。

SetRequestHeader 方法使调用应用程序能够在发送请求之前添加或删除 HTTP 请求标头。 标头名称在 Header 中提供,标头标记或值在 Value 中提供。 若要添加标头,请提供标头名称和值。 如果另一个具有该名称的标头已经存在,则替换它。 若要删除标头,请将 “标头 ”设置为要删除的标头的名称,并将 “值” 设置为 NULL

验证使用此方法添加的请求标头的名称和值。 标头必须格式良好。 有关有效 HTTP 标头的详细信息,请参阅 RFC 2616。 如果使用无效的标头,则会发生错误,并且不会添加标头。

注意

对于 Windows XP 和 Windows 2000,请参阅 WinHTTP 起始页的 运行时要求 部分。

示例

以下示例演示如何打开 HTTP 连接、设置请求标头、发送 HTTP 请求以及读取响应文本。 必须从命令提示符运行此示例。

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

以下脚本示例演示如何打开 HTTP 连接、设置请求标头和发送 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();

要求

要求
最低受支持的客户端
Windows XP、Windows 2000 Professional SP3 [仅限桌面应用]
最低受支持的服务器
Windows Server 2003、Windows 2000 Server SP3 [仅限桌面应用]
可再发行组件
Windows XP 和 Windows 2000 上的 WinHTTP 5.0 和 Internet Explorer 5.01 或更高版本。
IDL
HttpRequest.idl

Winhttp.lib
DLL
Winhttp.dll

请参阅

IWinHttpRequest

WinHttpRequest

WinHTTP 版本