|
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
PowerBASIC Syntax
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:
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.
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" 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
|
