如何使用Python的requests库实现multipart/mixed API多文件上传
使用Python requests库实现多文件上传的Multipart POST请求
requests库对multipart类型的请求有原生支持,直接通过files参数就能同时上传多个不同类型的文件,无需手动处理边界符。以下是针对你提供的API的实现方案:
核心实现思路
构造files字典,每个键对应API中表单字段的name属性,值为一个元组,包含(文件名, 文件内容/文件对象, Content-Type)三个元素。
代码示例
情况1:CSV为本地文件,JSON内容直接构造
import requests import json # 构造JSON参数内容 default_values = { "defaultApplications": ["45aa62ac003841fb8fb5b3b21cdf7f86", "45aa62ac003841fb8fb5b3b21cdf7f87"], "offerId": "25aa92ac003841fb8fb5b3b21cdf7f17" } # 请求地址 url = "https://na.abc.net/api/v1/operations/systems/register" # 构造files参数 with open("file.csv", "rb") as csv_file: files = { # CSV文件:name为"file",指定文件名和Content-Type "file": ("file.csv", csv_file, "text/csv"), # JSON内容:name为"defaultValues",将字典转为字符串,指定文件名和Content-Type "defaultValues": ("defaultValues.json", json.dumps(default_values), "application/json") } # 发送POST请求 response = requests.post(url, files=files) # 处理响应 if response.status_code == 200: print("请求成功,响应结果:") print(response.json()) else: print(f"请求失败,状态码:{response.status_code}") print("响应内容:", response.text)
情况2:CSV和JSON均为本地文件
如果你的JSON内容也是本地文件,只需将对应部分替换为文件对象即可:
import requests url = "https://na.abc.net/api/v1/operations/systems/register" with open("file.csv", "rb") as csv_file, open("defaultValues.json", "rb") as json_file: files = { "file": ("file.csv", csv_file, "text/csv"), "defaultValues": ("defaultValues.json", json_file, "application/json") } response = requests.post(url, files=files) # 处理响应逻辑同上
注意事项
- 文件打开必须使用
rb(二进制读取)模式,避免编码问题 - 使用
with语句管理文件对象,会自动关闭文件,避免资源泄漏 - 如果API需要额外的请求头或认证信息,可以在
requests.post中添加headers或auth参数
内容的提问来源于stack exchange,提问作者Ruturaj Mane
相关产品推荐
相关产品推荐

