Python使用Requests库POST传文件遇422验证错误求助
解决Requests POST接口422验证错误的问题
核心问题分析
- 变量顺序错误:你在调用
requests.post之后才定义files变量,导致发送请求时files参数未被赋值,接口自然接收不到files字段。 - 字段名不匹配:错误提示明确要求请求体中必须包含
files字段,但你定义的字典键是"file 1"和"file 2",完全不符合接口的参数要求。
修正后的代码示例
常见多文件上传场景(接口通过files字段接收多个文件)
这种场景下,需要用元组列表的形式传递同名字段,确保接口能识别到files参数:
# 推荐用with语句自动管理文件资源,避免泄漏 with open("sample.pdf", 'rb') as f1, open("sample11.pdf", 'rb') as f2: # 按接口要求的字段名"files"传递文件 files = [ ("files", ("sample.pdf", f1, "application/pdf")), ("files", ("sample11.pdf", f2, "application/pdf")) ] # 先定义files再发送请求,同时修正headers格式(如果mytoken是完整的headers字典) response = requests.post("url", headers=mytoken, params=p, files=files)
特殊场景:接口期望files为嵌套对象
如果接口要求files字段是一个包含多个文件的字典对象,调整结构如下:
with open("sample.pdf", 'rb') as f1, open("sample11.pdf", 'rb') as f2: files = { "files": { "file 1": ("sample.pdf", f1), "file 2": ("sample11.pdf", f2) } } response = requests.post("url", headers=mytoken, params=p, files=files)
额外调试建议
- 检查
headers格式:如果mytoken是类似{"Authorization": "Bearer xxx"}的完整字典,直接传headers=mytoken即可,不要额外嵌套大括号。 - 打印请求内容:通过
print(response.request.body)查看实际发送的请求体,确认files字段是否正确传入,方便定位问题。
内容的提问来源于stack exchange,提问作者Harini Ramasamy
相关产品推荐
相关产品推荐

