Partager via


Méthode IWinHttpRequest::SetCredentials

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

UserName [in]

Spécifie le nom d’utilisateur pour l’authentification.

Mot de passe [in]

Spécifie le mot de passe pour l’authentification. Ce paramètre est ignoré si bstrUserName a la valeur NULL ou est manquant.

Indicateurs [in]

Spécifie quand IWinHttpRequest utilise des informations d’identification. Il peut s’agir de l’une des valeurs suivantes.

Valeur Signification
HTTPREQUEST_SETCREDENTIALS_FOR_SERVER
Les informations d’identification sont transmises à un serveur.
HTTPREQUEST_SETCREDENTIALS_FOR_PROXY
Les informations d’identification sont transmises à un proxy.

Valeur retournée

La valeur de retour est S_OK sur la réussite ou une valeur d’erreur dans le cas contraire.

Notes

Cette méthode retourne une valeur d’erreur si un appel à Open n’a pas réussi. Il est supposé qu’une certaine mesure de l’interaction avec un serveur proxy ou un serveur d’origine doit se produire avant que les utilisateurs puissent définir des informations d’identification pour la session. En outre, tant que les utilisateurs ne savent pas quels schémas d’authentification sont pris en charge, ils ne peuvent pas mettre en forme les informations d’identification.

Notes

Pour Windows XP et Windows 2000, consultez la section Conditions d’exécution de la page de démarrage WinHTTP.

Pour s’authentifier auprès du serveur et du proxy, l’application doit appeler SetCredentials deux fois ; d’abord avec le paramètre Flags défini sur HTTPREQUEST_SETCREDENTIALS_FOR_SERVER, puis avec le paramètre Flags défini sur HTTPREQUEST_SETCREDENTIALS_FOR_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 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 les informations d’identification d’un proxy si un proxy est utilisé, envoyer une requête HTTP et lire le texte de 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());

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
HttpRequest.idl
Bibliothèque
Winhttp.lib
DLL
Winhttp.dll

Voir aussi

IWinHttpRequest

WinHttpRequest

WinHTTP Versions