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 设置代理信息,则此参数不起作用。
指定 WinHTTP 应用程序使用 Internet Explorer 的当前用户的代理设置。 这仅适用于以前未使用 ProxyCfg.exe。 如果安装了 ProxyCfg.exe,请指定“u”命令行参数使用手动设置。 如果 Internet Explorer 自动检测代理设置,或者它使用自动配置 URL 设置代理信息,则此参数不起作用。

可以在以空格分隔的字符串中指定代理。 代理列表可以包含用于访问代理的端口号。 若要列出特定协议的代理,字符串必须遵循格式,<协议>=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.*”。 若要列出多个地址和主机名,请在代理旁路字符串中用空格或分号分隔这些地址和主机名。 如果指定本地> 宏 <,该函数将绕过不包含句点的任何主机名。

警告

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

用法

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

示例语法

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

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

proxycfg -p proxy_server“<本地>”

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

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

proxycfg -p proxy_server

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

以下示例指定通过 http_proxy 代理访问 HTTP 服务器,HTTPS 服务器通过https_proxy访问。 本地 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 设置\连接\WinHttpSettings

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

ProxyCfg.exe 和身份验证

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

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