You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Python requests库会忽略我自定义的Proxy-Authorization请求头?

问题原因
  • requests 库默认会将Proxy-Authorization这类代理专属头和普通请求头分开处理,直接放到普通headers参数中的代理头会在请求预处理阶段被内部逻辑移除,避免和官方的代理认证流程冲突。
  • 你传入的auth参数是目标站点的认证配置,和代理认证逻辑无关,所以移除该参数不会解决代理头丢失的问题。
  • 若你的请求地址为HTTPS协议,你当前仅配置了http类型的代理,未配置https代理,requests 会走系统默认代理,你的自定义代理头自然不会生效。
  • 默认开启的trust_env参数会读取系统/环境变量中的代理配置,覆盖你手动传入的代理相关设置,也会导致自定义头丢失。
解决方案

方案1:使用proxy_headers参数(requests 2.27+ 版本适用)

requests 2.27及以上版本新增了proxy_headers参数,专门用于传递代理专属头,放在该参数中的头不会被内部逻辑清理:

def http_post(self, url: str, headers: dict, data: str, auth: AuthBase):
    token = self._xsuaa.get_token(self._service)
    res = requests.post(
        url,
        headers=headers,
        data=data,
        # HTTPS请求也需要配置对应代理
        proxies={'http': self._proxy, 'https': self._proxy},
        auth=auth,
        verify=False,
        timeout=100,
        allow_redirects=True,
        # 代理头放在专门的参数中
        proxy_headers={'Proxy-Authorization': f"Bearer {token}"}
    )

方案2:修改预请求对象(全版本兼容)

手动构造预请求对象,在预处理完成后手动添加代理头,绕过默认的清理逻辑:

def http_post(self, url: str, headers: dict, data: str, auth: AuthBase):
    token = self._xsuaa.get_token(self._service)
    session = requests.Session()
    # 禁用环境变量代理读取,避免配置被覆盖
    session.trust_env = False
    # 构造请求对象
    req = requests.Request(
        method='POST',
        url=url,
        headers=headers,
        data=data,
        auth=auth
    )
    # 预编译请求
    prepared_req = session.prepare_request(req)
    # 手动添加代理头,此时不会被清理
    prepared_req.headers['Proxy-Authorization'] = f"Bearer {token}"
    # 发送请求
    res = session.send(
        prepared_req,
        proxies={'http': self._proxy, 'https': self._proxy},
        verify=False,
        timeout=100,
        allow_redirects=True
    )

内容的提问来源于stack exchange,提问作者buschium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:45:06