IWinHttpRequest :: SetCredentials, méthode
La méthode SetCredentials définit les informations d’identification à utiliser avec un serveur http, qu’il s’agisse d’un serveur proxy ou d’un serveur d’origine.
Syntaxe
HRESULT SetCredentials(
[in] BSTR UserName,
[in] BSTR Password,
[in] HTTPREQUEST_SETCREDENTIALS_FLAGS Flags
);
Paramètres
-
Nom d’utilisateur [ dans]
-
Spécifie le nom d’utilisateur pour l’authentification.
-
Mot de passe [ dans]
-
Spécifie le mot de passe pour l’authentification. Ce paramètre est ignoré si bstrUserName est null ou manquant.
-
Indicateurs [ dans]
-
Spécifie quand IWinHttpRequest utilise les informations d’identification. Il peut s’agir de l’une des valeurs suivantes.
Valeur Signification - _SETCREDENTIALS HTTPREQUEST _ pour le _ serveur
Les informations d’identification sont transmises à un serveur. - _SETCREDENTIALS HTTPREQUEST _ pour le _ proxy
Les informations d’identification sont passées à un proxy.
Valeur retournée
La valeur de retour est S _ OK en cas de réussite ou une valeur d’erreur dans le cas contraire.
Remarques
Cette méthode retourne une valeur d’erreur si un appel à l' ouverture ne s’est pas terminé correctement. Il est supposé qu’une certaine mesure d’interaction avec un serveur proxy ou un serveur d’origine doit se produire pour que les utilisateurs puissent définir des informations d’identification pour la session. En outre, jusqu’à ce que les utilisateurs sachent quels schémas d’authentification sont pris en charge, ils ne peuvent pas formater les informations d’identification.
Notes
pour Windows XP et Windows 2000, consultez la section configuration requise pour l’exécution de la Page de démarrage de WinHTTP.
Pour s’authentifier avec le serveur et le proxy, l’application doit appeler SetCredentials deux fois. tout d’abord, avec le paramètre Flags défini sur HttpRequest _ SETCREDENTIALS _ pour _ Server et second, avec le paramètre Flags défini sur HttpRequest _ SETCREDENTIALS _ pour _ proxy.
Exemples
L’exemple suivant montre comment ouvrir une connexion HTTP, définir des informations d’identification pour le serveur, envoyer une requête HTTP et lire le texte de la 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 Credentials.
BSTR bstrUserName = SysAllocString(L"User Name");
BSTR bstrPassword = SysAllocString(L"Password");
hr = pIWinHttpRequest->SetCredentials(
bstrUserName,
bstrPassword,
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
SysFreeString(bstrUserName);
SysFreeString(bstrPassword);
}
if (SUCCEEDED(hr))
{ // Send Request.
hr = pIWinHttpRequest->Send(varEmpty);
}
if (SUCCEEDED(hr))
{ // Get Response text.
hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
}
if (SUCCEEDED(hr))
{ // Print response to 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 des informations d’identification pour le serveur, définir des informations d’identification pour un proxy, le cas échéant, envoyer une requête HTTP et lire le texte de la réponse.
// HttpRequest SetCredentials flags
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0;
HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1;
// Instantiate a WinHttpRequest object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
// Specify the target resource.
var targURL = "https://msdn.microsoft.com/downloads/samples/"+
"internet/winhttp/auth/authenticate.asp";
WinHttpReq.open("GET", targURL, false);
var Done = false;
var LastStatus=0;
do {
// Send a request to the server and wait for a response.
WinHttpReq.send();
// Obtain the status code from the response.
var Status = WinHttpReq.Status;
switch (Status){
// A 200 status indicates that the resource was retrieved.
case 200:
Done = true;
break;
// A 401 status indicates that the server
// requires authentication.
case 401:
WScript.Echo("Requires Server UserName and Password.");
// Specify the target resource.
WinHttpReq.open("GET", targURL, false);
// Set credentials for the server.
WinHttpReq.SetCredentials("User Name", "Password",
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER);
// If the same credentials are requested twice, abort
// the request. For simplicity, this sample does not
// check for a repeated sequence of status codes.
if (LastStatus==401)
Done = true;
break;
// A 407 status indicates that the proxy
// requires authentication.
case 407:
WScript.Echo("Requires Proxy UserName and Password.");
// Specify the target resource.
WinHttpReq.open("GET", targURL, false);
// Set credentials for the proxy.
WinHttpReq.SetCredentials("User Name", "Password",
HTTPREQUEST_SETCREDENTIALS_FOR_PROXY);
// If the same credentials are requested twice, abort
// the request. For simplicity, this sample does not
// check for a repeated sequence of status codes.
if (LastStatus==407)
Done = true;
break;
// Any other status is unexpected.
default:
WScript.Echo("Unexpected Status: "+Status);
Done = true;
break;
}
// Keep track of the last status code.
LastStatus = Status;
} while (!Done);
// Display the results of the request.
WScript.Echo(WinHttpReq.Status + " " + WinHttpReq.StatusText);
WScript.Echo(WinHttpReq.GetAllResponseHeaders());
Configuration requise
| Condition requise | Valeur |
|---|---|
| Client minimal pris en charge |
Windows XP, Windows 2000 Professional avec les [ applications de bureau SP3 uniquement] |
| Serveur minimal pris en charge |
Windows server 2003, Windows 2000 server avec des [ applications de bureau SP3 uniquement] |
| Composant redistribuable |
WinHTTP 5,0 et Internet Explorer 5,01 ou version ultérieure sur Windows XP et Windows 2000. |
| MIDL |
|
| Bibliothèque |
|
| DLL |
|