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 |
|
Bibliothèque |
|
DLL |
|