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

使用requests POST上传文件返回422,等效curl可正常运行如何解决

问题排查与修复方案
  • 最常见的错误是文件上传字段缺少显式文件名与MIME类型声明。curl执行--form file='@example_files/ex1.pdf'时会自动将本地文件名ex1.pdf和对应的PDF类型附带在multipart/form-data请求的file字段中,你当前的requests写法仅传入了文件二进制流,很多后端接口会校验上传文件的文件名,缺失该参数就会返回422语义错误。
    修正后的files参数写法如下:
    # 元组参数依次为:文件名、文件对象、MIME类型
    f = {'file': ('ex1.pdf', open("example_files/ex1.pdf", "rb"), 'application/pdf')}
    
  • 检查是否手动添加了Content-Type: multipart/form-data请求头。使用requests的files参数时,库会自动生成带boundary分隔符的Content-Type头,如果你手动指定了该头却没有补充正确的boundary参数,会导致后端无法解析表单数据,返回422错误。你当前给出的header配置中没有该字段,如果实际运行代码里加了请直接删除。
  • 校验密钥与路径正确性:确认代码中<KEY>对应的实际值和curl中使用的完全一致,没有多余的空格、换行符;确认Python脚本运行的工作目录和curl执行目录一致,example_files/ex1.pdf路径有效、文件可正常读取。
  • 如果需要进一步排查差异,可以打印请求完整内容和curl的-v输出对比:
    import requests
    from requests_toolbelt.utils import dump
    
    header = {
                "Accept": "application/json",
                "X-Hermes-Key": "替换为你的实际密钥"
            }
    
    f = {'file': ('ex1.pdf', open("example_files/ex1.pdf", "rb"), 'application/pdf')}
    r_create = requests.post(url="替换为你的实际请求地址", headers=header, files=f)
    # 打印完整请求日志
    data = dump.dump_all(r_create)
    print(data.decode('utf-8'))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:54:06