使用用于 .NET 的 Azure SDK 时配置代理

如果你的组织需要使用代理服务器来访问 Internet 资源,则需要某些配置才能使用用于 .NET 客户端库的 Azure SDK。 配置后,代理将应用于用于 HTTP 操作的基础 HttpClient 实例。

可以通过代码或环境变量配置代理。 选择的方法取决于所需的行为。 如果希望代理全局应用于在当前进程中创建的所有服务客户端,请设置相应的环境变量。 或者,通过代码配置代理以选择性地将设置应用于服务客户端。

重要

以下说明仅适用于 依赖于 Azure.Core 的库。

使用代码进行配置

若要以编程方式配置代理,请完成以下步骤:

  1. 创建 HttpClientHandler 设置其 Proxy 属性的对象。
  2. 创建一个服务客户端选项对象,该 Transport 对象的属性设置为 HttpClientTransport 接受 HttpClientHandler 实例的对象。
  3. 将服务客户端选项对象传递给服务客户端构造函数。

使用 Azure 密钥库 机密库作为示例,可使用以下代码:

using System.Net;
using Azure.Core.Pipeline;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;

using HttpClientHandler handler = new()
{
    Proxy = new WebProxy(new Uri("<proxy-url>")),
};

SecretClientOptions options = new()
{
    Transport = new HttpClientTransport(handler),
};
SecretClient client = new(
    new Uri("https://<key-vault-name>.vault.azure.net/"),
    new DefaultAzureCredential(),
    options);

使用环境变量进行配置

下表提供了可以设置为配置要使用的代理的环境变量的清单。

环境变量 目的
HTTP_PROXYhttp_proxy 用于 HTTP 请求的代理服务器。
HTTPS_PROXYhttps_proxy 用于 HTTPS 请求的代理服务器。
ALL_PROXYall_proxy 用于 HTTP 和 HTTPS 请求的代理服务器。
NO_PROXYno_proxy 要从代理中排除的主机名的逗号分隔列表。
GATEWAY_INTERFACE 指示应用在通用网关接口(CGI)环境中运行。 示例值: CGI/1.1

若要深入了解如何处理这些环境变量,请参阅 代码。 请注意以下行为:

  • 上表中的每个环境变量(除外 GATEWAY_INTERFACE)也可以定义为小写。 小写形式优先于大写形式。
  • 如果两者均http_proxyGATEWAY_INTERFACE未定义,HTTP_PROXY则使用。
  • ALL_PROXY 仅当未定义 HTTP 或 HTTPS 代理时,才会考虑该代理。
  • 特定于协议的环境变量优先于 ALL_PROXY

代理服务器 URL 采用形式 http[s]://[username:password@]<ip_address_or_hostname>:<port>/,其中 username:password 组合是可选的。 若要获取代理服务器的 IP 地址或主机名、端口和凭据,请咨询网络管理员。

以下示例演示如何在命令行界面(Windows)和 bash(Linux/macOS)环境中设置适当的环境变量。 设置适当的环境变量会导致用于 .NET 库的 Azure SDK 在运行时使用代理服务器。

rem Non-authenticated HTTP server:
set HTTP_PROXY=http://10.10.1.10:1180

rem Authenticated HTTP server:
set HTTP_PROXY=http://username:password@10.10.1.10:1180

rem Non-authenticated HTTPS server:
set HTTPS_PROXY=https://10.10.1.10:1180

rem Authenticated HTTPS server:
set HTTPS_PROXY=https://username:password@10.10.1.10:1180