为 Azure Blob 的 Python 客户端配置 SOCKS5 代理
自行配置传入的 Requests 会话,然后用 session_owner=False 将它的生命周期留在同步 Blob 客户端之外。
import requests
from azure.core.pipeline.transport import RequestsTransport
from azure.storage.blob import BlobServiceClient
with requests.Session() as session:
session.trust_env = False
session.proxies["https"] = "socks5h://proxy.example:1080"
transport = RequestsTransport(session=session, session_owner=False)
with BlobServiceClient(
account_url=account_url,
credential=credential,
transport=transport,
) as client:
pass替代 pass 执行所需的 Blob 操作,并使用应用自己的 account_url 和 credential。Requests 的可选 SOCKS 依赖必须已经存在。socks5h 会把目标 DNS 交给代理。对于允许公共中间商访问的公开可达 Blob 端点,SOCKS5 代理列表可为该会话的代理 URL 提供候选。
在这个会话上设置 trust_env,以控制 Requests 的环境集成。RequestsTransport 只在创建会话时应用环境初始化,传入已有会话时不会这样做。显式的 false 值可防止代理环境输入替换这条路径。
这一选择也会关闭基于环境的 CA 选择。如有需要,可向 RequestsTransport 传入 connection_verify="/path/to/ca-bundle.pem",并附带实际服务所需的根证书。
Blob 客户端会先于外层会话上下文关闭。session_owner=False 把所有权留给那个外层代码块。单独创建的令牌凭据可能使用另一套 HTTP 传输;如果获取它也需要 SOCKS,就要一并配置。