from io import BytesIO
import pycurl

body = BytesIO()
curl = pycurl.Curl()
try:
    curl.setopt(pycurl.URL, "https://api.example/")
    curl.setopt(pycurl.PROXY, "https://proxy.example:8443")
    curl.setopt(pycurl.PROXY_CAINFO, "/path/to/proxy-ca.pem")
    curl.setopt(pycurl.CAINFO, "/path/to/origin-ca.pem")
    curl.setopt(pycurl.CONNECTTIMEOUT, 5)
    curl.setopt(pycurl.TIMEOUT, 30)
    curl.setopt(pycurl.WRITEDATA, body)
    curl.perform()
finally:
    curl.close()

请使用支持 HTTPS 代理的 PycURL/libcurl 构建。包的路径代表预期的信任集合:PROXY_CAINFO 验证中间代理;CAINFO 验证目标站的 TLS。如果现有信任已覆盖该连接,就不要显式覆盖。

PROXY 中的 URL 描述其监听端。无需对 PROXYTYPE 做数字猜测。对于普通 HTTP 监听端,即使目标是 HTTPS,其 URL 仍为 http://。这种情况下,HTTP 代理列表 提供端点候选;只有当监听端确实使用 TLS 时,代理 TLS 包才适用。

需要时通过 PROXYUSERNAME 和 PROXYPASSWORD 提供代理账号。请保留证书验证:关闭代理验证会移除对中间代理的身份检查,而不是安装缺失的证书颁发机构。

相关文章