使用用于 .NET 的 Azure SDK 时配置代理
如果你的组织需要使用代理服务器来访问 Internet 资源,则需要某些配置才能使用用于 .NET 客户端库的 Azure SDK。 配置后,代理将应用于用于 HTTP 操作的基础 HttpClient
实例。
可以通过代码或环境变量配置代理。 选择的方法取决于所需的行为。 如果希望代理全局应用于在当前进程中创建的所有服务客户端,请设置相应的环境变量。 或者,通过代码配置代理以选择性地将设置应用于服务客户端。
重要
以下说明仅适用于 依赖于 Azure.Core 的库。
使用代码进行配置
若要以编程方式配置代理,请完成以下步骤:
- 创建 HttpClientHandler 设置其
Proxy
属性的对象。 - 创建一个服务客户端选项对象,该 Transport 对象的属性设置为
HttpClientTransport
接受HttpClientHandler
实例的对象。 - 将服务客户端选项对象传递给服务客户端构造函数。
使用 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_PROXY 或 http_proxy |
用于 HTTP 请求的代理服务器。 |
HTTPS_PROXY 或 https_proxy |
用于 HTTPS 请求的代理服务器。 |
ALL_PROXY 或 all_proxy |
用于 HTTP 和 HTTPS 请求的代理服务器。 |
NO_PROXY 或 no_proxy |
要从代理中排除的主机名的逗号分隔列表。 |
GATEWAY_INTERFACE |
指示应用在通用网关接口(CGI)环境中运行。 示例值: CGI/1.1 |
若要深入了解如何处理这些环境变量,请参阅 代码。 请注意以下行为:
- 上表中的每个环境变量(除外
GATEWAY_INTERFACE
)也可以定义为小写。 小写形式优先于大写形式。 - 如果两者均
http_proxy
GATEWAY_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