SetCredentials Method

 

Description

 

Sets credentials to be used with an HTTP server, whether it is a proxy server or an originating server.

 

C/C++ Syntax

 

HRESULT SetCredentials(

BSTR bstrUserName,

BSTR bstrPassword,

HTTPREQUEST_SETCREDENTIALS_FLAGS Flags

);

 

PowerBASIC Syntax

 

METHOD SetCredentials ( _

BYVAL bstrUserName AS STRING, _

BYVAL bstrPassword AS STRING, _

BYVAL Flags AS LONG _

)

 

Parameter

 

bstrUserName

 

[in] A value of type BSTR that specifies the user name for authentication.

 

bstrPassword

 

[in] A value of type BSTR that specifies the password for authentication. This parameter is ignored if bstrUserName is NULL or missing.

 

Flags

 

[in] A value that specifies when IWinHttpRequest uses credentials. Can be one of the following values:

 

Value

Meaning

HTTPREQUEST_SETCREDENTIALS_FOR_SERVER

Credentials are passed to a server.

HTTPREQUEST_SETCREDENTIALS_FOR_PROXY

Credentials are passed to a proxy.

 

Return Value

 

This method does not return a value.

 

OBJRESULT

 

Returns S_OK if successful or an error value otherwise.

 

Remarks

 

This method returns an error value if a call to Open has not completed successfully. It is assumed that some measure of interaction with a proxy server or origin server must occur before users can set credentials for the session. Moreover, until users know which authentication scheme(s) are supported, they cannot format the credentials.

 

To authenticate with both the server and the proxy, the application must call SetCredentials twice; first with the Flags parameter set to HTTPREQUEST_SETCREDENTIALS_FOR_SERVER, and second, with the Flags parameter set to HTTPREQUEST_SETCREDENTIALS_FOR_PROXY.

 
Example Code [PowerBASIC]

 

The following code example shows how to open an HTTP connection, set credentials for the server, send an HTTP request, and read the response text.

 

#INCLUDE ONCE "win32api.inc"
#INCLUDE ONCE "httprequest.inc"
 

DIM pHttpReq AS IWinHttpRequest

DIM bstrResponseText AS STRING

 

' Create an instance of the HTTP service

pHttpReq = NEWCOM "WinHttp.WinHttpRequest.5.1"

 

' Open an HTTP connection

pHttpReq.Open UCODE$("GET"), UCODE$("http://microsoft.com"), %FALSE

 

' Set credentials for server.

pHttpReq.SetCredentials UCODE$("User Name"), _

        UCODE$("Password"), _

        %HTTPREQUEST_SETCREDENTIALS_FOR_SERVER

 

' Send the HTTP Request

pHttpReq.Send

 

' Get the response text

bstrResponseText = pHttpReq.ResponseText

MSGBOX ACODE$(bstrResponseText)

 

Example Code [C++]

 

#include "stdafx.h"

#include "objbase.h"

 

#include "httprequest.h"

 

// IID for IWinHttpRequest.

const IID IID_IWinHttpRequest =

{

0x06f29373,

0x5c5a,

0x4b54,

{0xb0, 0x25, 0x6e, 0xf1, 0xbf, 0x8a, 0xbf, 0x0e}

};

 

int main(int argc, char* argv[])

{

   // 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"http://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;

}

 

Example Code [Script]

 

// 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 = "http://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());

 

Example Code [Visual Basic]

 

Option Explicit

 

'HttpRequest SetCredentials flags.

Const HTTPREQUEST_SETCREDENTIALS_FOR_SERVER = 0

Const HTTPREQUEST_SETCREDENTIALS_FOR_PROXY = 1

 

Private Sub Command1_Click()

   Dim HttpReq As Object

 

   ' Create the WinHTTPRequest ActiveX Object.

   Set HttpReq = New WinHttpRequest

 

   ' Switch the mouse pointer to an hourglass while busy.

   MousePointer = vbHourglass

 

   ' Open an HTTP connection.

   HttpReq.Open "GET", "http://microsoft.com", False

 

   ' Set credentials for server.

   HttpReq.SetCredentials "User Name", "Password", _

       HTTPREQUEST_SETCREDENTIALS_FOR_SERVER

 

   ' Send the HTTP Request.

   HttpReq.Send

 

   ' Get all response text.

   Text1.Text = HttpReq.ResponseText

 

   ' Switch the mouse pointer back to default.

   MousePointer = vbDefault

 

End Sub

 

Valid XHTML 1.0 Transitional