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

为文件添加边界后POST请求出现UTF-8编码错误的解决咨询

问题分析与解决方案

核心错误原因

  1. 第一个错误(ValueError):传给requests.post的files参数格式错误。files需要接收字典类型数据,键为表单字段名,值为包含文件名、文件内容、Content-Type的元组,而非单纯的文件路径字符串。
  2. 编码错误与连接断开:手动拼接multipart/form-data格式时,将二进制文件转成latin1字符串再编码为UTF-8的操作会破坏原始字节结构,导致服务器无法解析请求,最终触发连接断开。

requests对非UTF-8请求的支持

requests完全支持发送非UTF-8的请求,尤其是文件上传场景。它会自动处理二进制数据的传输,无需手动转码为UTF-8字符串。

修正后的代码

不需要手动拼接边界和编码,直接利用requests的files参数自动处理multipart请求:

# 读取原始二进制文件
with open(fw_file, 'rb') as f:
    gen_data = f.read()

# 构造files参数:键对应表单中的name值,值为(文件名, 二进制数据, 内容类型)
files = {
    'file': (file_name, gen_data, 'application/octet-stream')
}

# 发送请求,无需手动设置Content-Type(requests会自动添加带边界的Content-Type)
resp = requests.post(target, files=files, headers=headers, verify=False)

为什么之前的方法行不通?

  1. 手动拼接multipart格式时,将二进制数据通过latin1解码再转UTF-8的操作会改变原始字节。比如0x94这类非UTF-8字节,转码后会变成不符合原始文件的内容,导致服务器无法识别。
  2. 手动处理边界、换行符和Content-Type容易出现格式错误,比如边界重复、换行符不正确等,服务器接收到错误格式的请求后会直接断开连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 05:43:07