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

如何用Python requests包通过form-data上传zip内的CSV并携带参数文件

Python复现POSTMAN form-data POST请求解决415错误

问题根源

  1. 手动设置Content-Type头:requests在处理files参数时会自动生成带正确边界的multipart/form-data头,手动设置会导致边界不匹配,触发415错误。
  2. 字段名不匹配:需求要求的是inputFile字段,你代码里用了archive,导致接口无法识别文件字段。
  3. 参数传递位置错误:JSON参数应该放在请求体的form-data中,而非URL查询参数(params参数对应URL查询参数)。

修正后的代码

import requests

# 仅保留必要请求头,移除手动设置的Content-Type
import_headers = {
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive',
    'Accept': '*/*',
    'Authorization': f'Bearer {access_token}'
}

# 定义JSON参数对象
params_obj = {
    "mode": "CREATE_UPDATE",
    "encoding": "UTF-8",
    "format": {
        "separator": ";",
        "endOfLine": "\r\n",
        "enclosing": "\"",
        "escaping": "\""
    },
    "reportRecipients": [
        "{emailAddress}"  # 替换为实际邮箱地址
    ]
}

# 使用with语句安全管理文件资源
with open(r'C:\{filePath}\test_undelimited_MKII.zip', 'rb') as zip_file:
    # 构造form-data字段:严格匹配需求的inputFile,同时添加JSON参数字段
    form_data = {
        # 将JSON参数作为form-data项,指定Content-Type为application/json
        'parameters': (None, params_obj, 'application/json'),
        # inputFile字段:指定文件名、文件对象、正确的Content-Type
        'inputFile': ('test_undelimited_MKII.zip', zip_file, 'application/zip')
    }
    
    # 发送POST请求
    response = requests.post(url, headers=import_headers, files=form_data)
    
    # 打印响应信息用于排查
    print(f"状态码: {response.status_code}")
    print(f"响应内容: {response.text}")

关键说明

  • 用with语句打开文件,确保文件自动关闭,避免资源泄漏。
  • form_data中通过三元组定义字段:对于非文件字段(如JSON参数),格式为(文件名, 内容, Content-Type),文件名设为None即可;文件字段则传入文件名、文件对象和对应Content-Type。
  • 完全依赖requests自动生成multipart/form-data头,避免手动设置导致的格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:32:50