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

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

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

然后,可以使用环境变量来全局配置代理,也可以通过将名为 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 代码

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

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

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" }