python + requests:请求头('Content-Type': 'multipart/form-data'),并且files和其他参数均正确定义,但是文件上传一直失败,需要使用MultipartEncoder
解释
1. 在使用'Content-Type': 'multipart/form-data'上传文件时,你需要将文件作为请求体的一部分进行传输。而由于文件可能非常大,因此需要将文件分成多个部分进行传输。这就需要使用多部分编码(Multipart Encoding)来将文件分割成多个部分,并将每个部分与其它的表单数据一起打包到一个请求体中。
2. MultipartEncoder是一个Python库,它可以将请求体分割成多个部分,并为每个部分添加必要的头信息。这样,你就可以将请求体作为一个整体进行上传,而不必手动将其分割成多个部分。使用MultipartEncoder可以方便地处理文件上传时的多部分编码,因此它是上传文件时的常用工具之一。
3. 因此,在使用'Content-Type': 'multipart/form-data'上传文件时,你需要使用MultipartEncoder将请求体包装起来,以便服务器能够正确地解析请求体并处理文件内容。
代码示例 (方式一)
from requests_toolbelt.multipart.encoder import MultipartEncoder
import requests
def test_files():
url = "https://../all/versions?abortWhenHeartbeatException=yes"
files = ('zc_test_1.0.process.zip',
open('/Users/.../resource/zc_test_1.0.process.zip', 'rb'),
'application/octet-stream')
payload = {
# ...
"studioVersion": "13.6.0-13.6.0%0D",
"visualVars": "%5B%5D",
"outputParams": "%5B%5D",
"file": files,
}
headers = {
'x-referer': '**',
'x-version': '13.6.0',
'Accept-Language': 'zh-CN',
'Authorization': '***',
'X-Tenant': ''
}
mutipart_encoder = MultipartEncoder(fields=payload)
headers['Content-Type'] = mutipart_encoder.content_type
response = requests.request("POST", url, headers=headers, data=mutipart_encoder)
print(response.text)
代码示例(方式二)
def test_files():
url = "https://../versions?abortWhenHeartbeatException=yes"
files = {
"file": (
'zc_test_1.0.process.zip', open('/Users/../resource/zc_test_1.0.process.zip', 'rb'), 'application/zip')
}
payload = {
# ...
"studioVersion": "13.6.0-13.6.0%0D",
"visualVars": "%5B%5D",
"outputParams": "%5B%5D",
}
headers = {
'x-referer': '**',
'x-version': '13.6.0',
'Accept-Language': 'zh-CN',
'Authorization': '**',
'X-Tenant': '**',
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix