带zip文件上传的curl命令转Python requests请求无效问题咨询
问题原因分析
- 自动转换工具错误识别了curl中
file=@myproject.zip;type=application/zip的参数,把MIME类型标识错误拼接进了文件名,导致两个核心错误:- 读取本地文件时尝试打开不存在的
myproject.zip;type文件 - 上传时的文件名和MIME类型参数都不符合接口解析要求
- 读取本地文件时尝试打开不存在的
- 普通表单参数放在
files字段中虽然理论上可运行,但不符合requests的常规使用规范,也容易引发服务端参数解析异常。
修正后的代码
import requests # 可选:禁用SSL校验时的警告提示 import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 普通表单参数统一放在data中 data = { 'session.id': 'e7a29776-5783-49d7-afa0-b0e688096b5e', 'ajax': 'upload', 'project': 'MyProject' } # 文件参数单独配置,格式为 (上传文件名, 文件对象, MIME类型) # 推荐用with上下文管理器自动关闭文件,避免资源泄露 with open('myproject.zip', 'rb') as f: files = { 'file': ('myproject.zip', f, 'application/zip') } response = requests.post( 'https://localhost:8443/manager', data=data, files=files, verify=False ) # 可打印返回结果排查问题 print(response.status_code) print(response.text)
修正说明
- 将普通表单字段从
files迁移到data参数,符合multipart/form-data请求的参数规范 - 修正了文件字段的配置,正确对应本地文件路径、上传文件名和MIME类型
- 补充了上下文管理器逻辑自动释放文件资源,可选添加警告禁用代码避免运行时出现SSL校验提示
内容的提问来源于stack exchange,提问作者The Beast
相关产品推荐
相关产品推荐

