解释
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)