如何为用于 Python 的 Azure SDK 配置代理

通常在以下情况下需要代理:

  • 你位于企业防火墙后面
  • 网络流量需要通过安全设备
  • 你想要使用自定义代理进行调试或路由

如果你的组织需要使用代理服务器来访问 Internet 资源,则需要使用代理服务器信息设置环境变量,以使用用于 Python 的 Azure SDK。 设置环境变量(HTTP_PROXY和HTTPS_PROXY)会导致用于 Python 的 Azure SDK 在运行时使用代理服务器。

代理服务器 URL 采用可选用户名和密码组合的形式 http[s]://[username:password@]<ip_address_or_domain>:<port>/

可以从 IT/网络团队、浏览器或网络实用工具获取代理信息。

然后,可以使用环境变量全局配置代理,也可以通过将名为单个客户端构造函数或作方法的参数 proxies 传递给代理来指定代理。

全局配置

若要为脚本或应用全局配置代理,请使用服务器 URL 定义 HTTP_PROXYHTTPS_PROXY 环境变量。 这些变量适用于任何版本的 Azure 库。 请注意,HTTPS_PROXY并不意味着HTTPS代理,而是指的是对https://请求的代理。

如果将参数 use_env_settings=False 传递给客户端对象构造函数或作方法,则忽略这些环境变量。

从命令行设置

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=http://10.10.1.10:1180

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

在 Python 代码中设置

可以使用环境变量设置代理设置,无需自定义配置。

import os
os.environ["HTTP_PROXY"] = "http://10.10.1.10:1180"

# Alternate URL and variable forms:
# os.environ["HTTP_PROXY"] = "http://username:password@10.10.1.10:1180"
# os.environ["HTTPS_PROXY"] = "http://10.10.1.10:1180"
# os.environ["HTTPS_PROXY"] = "http://username:password@10.10.1.10:1180"

自定义配置

按客户端或按方法设置 Python 代码

对于自定义配置,可以为特定客户端对象或作方法指定代理。 使用名为 proxies 的参数指定代理服务器。

例如,文章 示例:使用 Azure 存储 中的以下代码通过 BlobClient 构造函数指定了带有用户凭据的 HTTPS 代理。 在这种情况下,该对象来自基于 azure.core 的 azure.storage.blob 库。

from azure.identity import DefaultAzureCredential

# Import the client object from the SDK library
from azure.storage.blob import BlobClient

credential = DefaultAzureCredential()

storage_url = "https://<storageaccountname>.blob.core.windows.net"

blob_client = BlobClient(storage_url, container_name="blob-container-01",
    blob_name="sample-blob.txt", credential=credential,
    proxies={ "https": "https://username:password@10.10.1.10:1180" }
)

# Other forms that the proxy URL might take:
# proxies={ "http": "http://10.10.1.10:1180" }
# proxies={ "http": "http://username:password@10.10.1.10:1180" }
# proxies={ "https": "https://10.10.1.10:1180" }