Método IWinHttpRequest::SetProxy

El método SetProxy establece la información del servidor proxy.

Sintaxis

HRESULT SetProxy(
  [in]           HTTPREQUEST_PROXY_SETTING ProxySetting,
  [in, optional] VARIANT                   ProxyServer,
  [in, optional] VARIANT                   BypassList
);

Parámetros

ProxySetting [in]

Marcas que controlan este método. Puede ser uno de los valores siguientes.

Value Significado
HTTPREQUEST_PROXYSETTING_DEFAULT
Configuración de proxy predeterminada. Equivalente a HTTPREQUEST_PROXYSETTING_PRECONFIG.
HTTPREQUEST_PROXYSETTING_PRECONFIG
Indica que la configuración del proxy se debe obtener del Registro. Se supone que se ha ejecutado Proxycfg.exe . Si no se ha ejecutado Proxycfg.exe y se especifica HTTPREQUEST_PROXYSETTING_PRECONFIG , el comportamiento es equivalente a HTTPREQUEST_PROXYSETTING_DIRECT.
HTTPREQUEST_PROXYSETTING_DIRECT
Indica que se debe tener acceso directamente a todos los servidores HTTP y HTTPS. Use este comando si no hay ningún servidor proxy.
HTTPREQUEST_PROXYSETTING_PROXY
Cuando se especifica HTTPREQUEST_PROXYSETTING_PROXY , varProxyServer debe establecerse en una cadena de servidor proxy y varBypassList debe establecerse en una cadena de lista de omisión de dominio. Esta configuración de proxy solo se aplica a la instancia actual del objeto WinHttpRequest .

ProxyServer [in, opcional]

Se establece en una cadena de servidor proxy cuando ProxySetting es igual a HTTPREQUEST_PROXYSETTING_PROXY.

BypassList [in, opcional]

Se establece en una cadena de lista de omisión de dominio cuando ProxySetting es igual a HTTPREQUEST_PROXYSETTING_PROXY.

Valor devuelto

El valor devuelto se S_OK si se ejecuta correctamente o se produce un valor de error en caso contrario.

Comentarios

Permite a la aplicación que realiza la llamada especificar el uso de información de proxy predeterminada (configurada por la herramienta de configuración de proxy) o invalidar Proxycfg.exe. Se debe llamar a este método antes de llamar al método Send . Si se llama a este método después del método Send , no tiene ningún efecto.

IWinHttpRequest pasa estos parámetros a los servicios HTTP de Microsoft Windows (WinHTTP).

Nota

Para Windows XP y Windows 2000, consulta la sección Requisitos en tiempo de ejecución de la página de inicio de WinHTTP.

Ejemplos

En el ejemplo siguiente se muestra cómo establecer la configuración de proxy para un servidor proxy determinado, abrir una conexión HTTP, enviar una solicitud HTTP y leer el texto de respuesta. Este ejemplo debe ejecutarse desde un símbolo del sistema. Esta configuración de proxy solo funciona si tiene un servidor proxy denominado "proxy_server" que usa el puerto 80 y el equipo puede omitir el servidor proxy cuando el nombre de host termina con ".microsoft.com".

#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;
    VARIANT         varProxy;
    VARIANT         varUrl;
    
    CLSID           clsid;

    VariantInit(&varFalse);
    V_VT(&varFalse)   = VT_BOOL;
    V_BOOL(&varFalse) = VARIANT_FALSE;

    VariantInit(&varEmpty);
    V_VT(&varEmpty) = VT_ERROR;

    VariantInit(&varProxy);
    VariantInit(&varUrl);

    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))
    {   // Specify proxy and URL.
                varProxy.vt = VT_BSTR;
                varProxy.bstrVal = SysAllocString(L"proxy_server:80");
                varUrl.vt = VT_BSTR;
                varUrl.bstrVal = SysAllocString(L"*.microsoft.com");
                hr = pIWinHttpRequest->SetProxy(HTTPREQUEST_PROXYSETTING_PROXY,
                                    varProxy, varUrl); 
        }
    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))
    {   // Send Request.
        hr = pIWinHttpRequest->Send(varEmpty);
    }
    if (SUCCEEDED(hr))
    {   // Get Response text.
                hr = pIWinHttpRequest->get_ResponseText(&bstrResponse);
    }
    if (SUCCEEDED(hr))
    {   // Print the response to a console.
                wprintf(L"%.256s",bstrResponse);
    }
        
        // Release memory.
    if (pIWinHttpRequest)
        pIWinHttpRequest->Release();
        if (varProxy.bstrVal)
                SysFreeString(varProxy.bstrVal);
        if (varUrl.bstrVal)
                SysFreeString(varUrl.bstrVal);
    if (bstrResponse)
        SysFreeString(bstrResponse);
        
        CoUninitialize();
        return 0;
}

En el ejemplo de scripting siguiente se muestra cómo establecer la configuración de proxy para un servidor proxy determinado, abrir una conexión HTTP, enviar una solicitud HTTP y leer el texto de respuesta. Esta configuración de proxy solo funciona si tiene un servidor proxy denominado "proxy_server" que usa el puerto 80 y el equipo puede omitir el servidor proxy cuando el nombre de host termina con ".microsoft.com".

// HttpRequest SetCredentials flags.
HTTPREQUEST_PROXYSETTING_DEFAULT   = 0;
HTTPREQUEST_PROXYSETTING_PRECONFIG = 0;
HTTPREQUEST_PROXYSETTING_DIRECT    = 1;
HTTPREQUEST_PROXYSETTING_PROXY     = 2;

// Instantiate a WinHttpRequest object.
var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");

// Use proxy_server for all requests outside of 
// the microsoft.com domain.
WinHttpReq.SetProxy( HTTPREQUEST_PROXYSETTING_PROXY, 
                     "proxy_server:80", 
                     "*.microsoft.com");

// Initialize an HTTP request.  
WinHttpReq.Open("GET", "https://www.microsoft.com", false);

// Send the HTTP request.
WinHttpReq.Send(); 

// Display the response text.
WScript.Echo( WinHttpReq.ResponseText);

Requisitos

Requisito Value
Cliente mínimo compatible
Windows XP, Windows 2000 Professional con SP3 [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows Server 2003, Windows 2000 Server con SP3 [solo aplicaciones de escritorio]
Redistribuible
WinHTTP 5.0 e Internet Explorer 5.01 o posterior en Windows XP y Windows 2000.
IDL
HttpRequest.idl
Biblioteca
Winhttp.lib
Archivo DLL
Winhttp.dll

Consulte también

IWinHttpRequest

WinHttpRequest

Versiones de WinHTTP