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

Python requests POST上传文件返回500但同场景Curl运行正常问题求助

问题根源

你在代码中手动设置了Content-Type: multipart/form-data请求头,这是错误的。当使用requests库的files参数上传文件时,requests会自动生成包含正确boundary分隔符的Content-Type请求头,你手动覆盖该头后,请求头中缺少和请求体匹配的boundary参数,服务端无法正确解析表单内容,因此返回500错误。

修复方案

删除uploadFileToAVoucher方法中手动设置Content-Type的代码即可,优化后的代码如下:

def uploadFileToAVoucher(self, voucherId, filename):
    heads = self.__headers.copy()
    # 移除手动设置Content-Type的代码,由requests自动处理
    print(filename)
    # 用with上下文管理器打开文件,避免资源泄漏
    with open(filename, 'rb') as pdf_file:
        files = {
            'file': (filename, pdf_file, 'application/pdf')
        }
        return requests.post(
            LexofficeApi.API_URL + '/v1/vouchers/' + voucherId + '/files',
            files=files, 
            headers=heads
        )

补充说明

你之前对比报文时看到的请求体中的boundary是requests生成请求体时自动添加的,但请求头中的Content-Type被你手动覆盖后没有携带对应的boundary值,服务端无法匹配请求体的分隔规则,自然无法正常处理请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:57:03