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
相关产品推荐
相关产品推荐

