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

Python requests移除PreparedRequest的Content-Length触发TypeError问题

问题原因
  1. 你的请求体通过json.dumps(data)生成,返回结果是字符串类型,不是字节类型。
  2. 保留Content-Length头时,requests在请求预处理阶段会自动把字符串类型的请求体编码为字节类型,同时根据字节长度计算并设置Content-Length的值,底层socket传输的是字节数据,因此运行正常。
  3. 当你主动删除Content-Length头后,requests底层会自动启用分块传输编码(Transfer-Encoding: chunked),该模式下requests不会对请求体做自动编码处理,会直接把传入的字符串传给socket的发送方法,而socket仅支持接收字节类型数据,因此抛出类型错误。
解决方案
  • 方案一:手动将请求体转为字节类型,将原代码中data=json.dumps(data)修改为data=json.dumps(data).encode('utf-8')即可。
  • 方案二:使用requests自带的json参数传参,不需要自行序列化,直接替换为json=data,requests会自动处理序列化、编码、请求头配置逻辑,即使删除Content-Length头也不会报错。
  • 方案三:如果不需要使用分块传输,仅需要调整Content-Length的取值,不要直接删除该头,手动计算请求体字节长度后重新给该头赋值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 19:27:09