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,就要一并配置。

相关文章