ProxyCfg.exe 代理配置工具

重要

从 Windows Vista 和 Windows Server 2008 开始已弃用 ProxyCfg.exe。 其替换为 Netsh.exe(请参阅 Netsh.exe 命令)。

本主题介绍如何使用 Microsoft Windows HTTP 服务 (WinHTTP) 代理配置工具 ProxyCfg.exe

有两种方法可以使用 Microsoft Windows HTTP 服务 (WinHTTP) 通过代理来访问 HTTP 和安全超文本传输协议 (HTTPS) 服务器。 第一种,可以从 WinHTTP 应用程序内指定代理设置。 第二种,可以使用位于 %windir%\system32 目录中的代理配置实用工具从应用程序外部指定默认代理设置。

可以从应用程序或脚本内以编程方式设置代理数据。 如果使用 WinHTTP API 编写应用程序,请使用以下两种方法之一更改代理设置。

  • 使用 WinHttpOpen 函数。 在第二个参数中指定访问类型,在第三个参数中指定代理的名称,并在第四个参数中指定绕过列表。 以下示例演示如何使用 WinHttpOpen 函数设置代理数据。

    hSession = WinHttpOpen( L"WinHTTP Example/1.0",  
                            WINHTTP_ACCESS_TYPE_NAMED_PROXY,
                            L"proxy_name", 
                            L"<local>", 
                            0);
    
  • 使用 WinHttpSetOption 函数。 通过 WINHTTP_OPTION_PROXY 标志,可以使用 WINHTTP_PROXY_INFO 结构指定代理设置。 以下示例代码演示如何使用 WinHttpSetOption 函数设置代理数据。

    WINHTTP_PROXY_INFO proxyInfo;
    proxyInfo.dwAccessType = WINHTTP_ACCESS_TYPE_NAMED_PROXY;
    proxyInfo.lpszProxy = L"proxy_name";
    proxyInfo.lpszProxyBypass = L"<local>";
    
    // Set the proxy information for this session.
    WinHttpSetOption( hSession, 
                      WINHTTP_OPTION_PROXY, 
                      &proxyInfo, 
                      sizeof(proxyInfo));
    

如果要使用 WinHttpRequest 对象编写脚本或应用程序,请使用以下方法更改代理设置。

  • 使用 SetProxy 方法。 在第一个参数中指定访问类型,在第二个参数中指定代理的名称,并在第三个参数中指定绕过列表。 以下示例演示如何在脚本中使用 SetProxy 方法设置代理数据。

    WinHttpReq.SetProxy( HTTPREQUEST_PROXYSETTING_PROXY, 
                         "proxy_server:80", 
                         "*.microsoft.com");
    

若要指定默认设置且不需要使用 SetProxy 方法或 WinHttpSetOption 函数,请使用代理配置实用工具。 使用此实用工具,可以指定应用程序直接访问网络、通过代理访问网络,或者通过指定绕过列表以直接访问和代理访问的组合方式访问网络。 使用 WinHTTP API 时,代理配置工具仅在将 WINHTTP_ACCESS_TYPE_DEFAULT 标志传递给 WinHttpOpen API 时确定这些设置。 WinHttpRequest 对象默认使用代理配置工具设置。

WinHTTP 的代理设置不是 Microsoft Internet Explorer 的代理设置。 无法在 Microsoft Windows 控制面板中配置 WinHTTP 的代理设置。 使用 WinHTTP 代理配置实用工具不会更改用于 Internet Explorer 的设置。

注意

如果尝试使用 WinHTTP 打开和发送 HTTP 请求,并且代理设置不正确,则会出现错误。

命令行参数

下表列出了可以与“ProxyCfg.exe”工具一起使用的命令行参数。

参数 说明
如果未指定任何参数,将显示当前的 WinHTTP 代理设置。
显示帮助信息。
d 指定 WinHTTP 应用程序直接访问网络,不使用代理。
p 指定代理服务器。 还可以指定在没有代理的情况下访问的服务器的可选列表。
u 指定 WinHTTP 应用程序使用 Internet Explorer 的当前用户代理设置。 如果 Internet Explorer 自动检测代理设置,或者使用自动配置 URL 来设置代理信息,则此参数不起作用。
i 指定 WinHTTP 应用程序使用 Internet Explorer 的当前用户代理设置。 这仅适用于之前未使用 ProxyCfg.exe 的情况。 如果安装了 ProxyCfg.exe,请指定“u”命令行参数以使用手动设置。 如果 Internet Explorer 自动检测代理设置,或者使用自动配置 URL 来设置代理信息,则此参数不起作用。

可采用空格分隔的字符串形式指定代理。 代理列表可以包含用于访问代理的端口号。 若要列出特定协议的代理,字符串必须遵循 <protocol>=https://<proxy_name> 格式。 有效协议为 HTTP 和 HTTPS。 例如,若要列出 HTTP 代理,有效的字符串为 http=https://http_proxy_name:80,其中 http_proxy_name 是代理服务器的名称,80 是访问代理必须使用的端口号。 如果代理对该协议使用默认端口号,则可以省略端口号。 如果代理名称独自列出,则可以将其用作任何没有指定代理的协议的默认代理。 例如,http=https://http_proxy other_proxy 会对任何 HTTP 操作使用 http_proxy,而 HTTPS 协议使用名为 other_proxy 的代理。

可以在代理绕过列表中列出本地已知的主机名或 IP 地址。 此列表可以包含通配符,例如“*”,通配符会使应用程序绕过适合指定模式的地址的代理服务器,例如“*.microsoft.com”或“*.org”。 通配符必须是列表中最左侧的字符。 例如,不支持“aaa.*”。 若要列出多个地址和主机名,请在代理绕过字符串中用空格或分号分隔这些地址和主机名。 如果指定 <local> 宏,函数将绕过不包含句点的任何主机名。

警告

Proxycfg.exe 运行后,无法还原以前的代理设置。 但是,可以完全删除代理设置。

使用情况

若要使用代理配置工具,请打开命令提示符窗口,并使用相应的命令行参数运行代理配置实用工具。 下一节提供语法示例。

示例语法

示例 1:仅对外部资源使用代理

以下内容最常用于 Proxycfg.exe。 此命令指定通过名为“proxy_server”的代理服务器访问 HTTP 和 HTTPS 服务器,但不包含句点的主机名除外。

proxycfg -p proxy_server "<local>"

示例 2:对所有资源使用代理

以下示例指定通过名为“proxy_server”的代理服务器访问 HTTP 和 HTTPS 服务器。 未指定绕过列表。

proxycfg -p proxy_server

示例 3:对安全资源使用不同的代理

以下示例指定通过 http_proxy 代理访问 HTTP 服务器,通过 https_proxy 访问 HTTPS 服务器。 本地 Intranet 站点和 *.microsoft.com 域中的任何站点都绕过代理。

proxycfg -p "http=http_proxy https=https_proxy" "<local>;*.microsoft.com"

删除 ProxyCfg.exe

使用代理配置工具后,无法还原原始代理设置。 但是,如有必要,可以删除实用工具创建的注册表设置。 若要删除 ProxyCfg.exe 创建的注册表项,必须从以下注册表项中删除 WinHttpSettings 值。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\Connections\WinHttpSettings

删除 WinHttpSettings 值会删除所有代理配置

ProxyCfg.exe 和身份验证

代理配置实用工具设置默认身份验证策略。 由于不应对不受信任的主机执行 NTLM 身份验证,因此默认情况下,仅对代理绕过列表中的主机自动执行 NTLM 身份验证。 如果没有代理,仍可使用 ProxyCfg.exe 来指定用于执行 NTLM 身份验证的受信任主机的绕过列表。 出于此目的使用 ProxyCfg.exe 时,需要指定代理名称,但可以使用任何有效字符串代替实际的代理名称。

有关自动登录策略的详细信息,请参阅自动登录策略