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

requests模块是否会截断请求头?长Bearer令牌请求报错求助

问题解决:长Bearer令牌请求的编码与截断问题

先明确:requests不会默认截断请求头里的Bearer令牌,你看到的省略号大概率是错误提示或日志显示时的截断,而非实际请求中的令牌被截断。

核心原因分析

报错里的…是错误信息里的占位符,不是你令牌本身的内容。latin-1编码只能处理0-255范围的字符,你的令牌里可能包含了latin-1无法编码的Unicode字符(比如特殊符号、非ASCII字符),当requests用默认的latin-1编码处理请求头时就会触发这个错误。

具体解决方法

1. 强制指定请求头编码为UTF-8

requests默认用latin-1编码请求头,你可以手动设置编码为UTF-8,确保令牌里的所有字符都能被正确处理:

import requests

url = "你的API地址"
token = "你的长Bearer令牌"
headers = {
    "Authorization": f"Bearer {token}",
    "Content-Type": "application/json"  # 按需调整
}

# 创建Session并设置默认编码为UTF-8
session = requests.Session()
session.headers.update(headers)
session.request_encode = "utf-8"

response = session.post(url, json={"请求体数据": "示例内容"})

2. 排查令牌的字符合法性

检查你的Bearer令牌是否包含非URL安全的字符,比如特殊符号、emoji或者编码错误的字符。如果有,尝试重新生成令牌,确保它只包含Base64允许的字符(A-Z、a-z、0-9、+、/、=)。

3. 手动编码令牌适配latin-1

如果令牌里必须保留Unicode字符,可以先手动用UTF-8编码再转成latin-1兼容格式:

token_encoded = token.encode("utf-8").decode("latin-1")
headers = {
    "Authorization": f"Bearer {token_encoded}"
}
response = requests.post(url, headers=headers, json=...)

4. 验证实际发送的请求头

用抓包工具(比如Charles、Fiddler)或者代码打印日志,确认令牌是否真的被截断:

from requests.adapters import HTTPAdapter

class DebugAdapter(HTTPAdapter):
    def send(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
        print("实际发送的Authorization头:", request.headers.get("Authorization"))
        return super().send(request, stream, timeout, verify, cert, proxies)

session = requests.Session()
session.mount("https://", DebugAdapter())
# 发送请求...

总结

requests不会自动截断长令牌,问题根源是编码不兼容。优先尝试指定UTF-8编码,再排查令牌本身的字符问题,抓包验证可以帮你彻底确认请求内容是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:52:40