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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:20:24