python表单提交文件_python3做multipart/form-data上传请求
http協議本身的原始方法不支持multipart/form-data請求,這個請求由原始方法演變而來的。multipart/form-data的基礎方法是post,也就是說是由post方法來組合實現的
請求頭必須包含一個特殊的頭信息:Content-Type,必須為multipart/form-data,同時還一個內容分割符 (boundary) 用于分割請求體中的多個post的內容。因為接收方解析和還原文件必須要根據這個boundary。
也就是說,具體的頭信息必須包含如下設置:
Content-Type: multipart/form-data; boundary=${bound}
例子:
import os, random, sys, requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
#請求地址
url = 'http://192.168.1.48'
#頭部
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0',
'Referer': url
}
#路徑
file = 'D:\\test\上傳測試.doc'
multipart_encoder = MultipartEncoder(
fields = {
#這里根據服務器需要的參數格式進行修改
params : json.dumps({
'folderId':-100,
'type':'onlinedisk',
'name':'5106024f8a22422172bd88d455be48a0.gif',
'size':16043,
'md5':'57c1a6348e35d4f86ed4d520da8e1dc2',
'ignoreSame':false,
'autoRename':false,
'startPosition':0,
'blockMd5':'57c1a6348e35d4f86ed4d520da8e1dc2',
'blockSize':16043,
'quickVerifyCode':'3c91184c5c91e13a60ebbf144f13783c',
'repaire':false
}),
'file': ('file', open(file, 'rb'), 'application/octet-stream')
},
boundary=boundary
)
headers['Content-Type'] = multipart_encoder.content_type
#請求頭必須包含一個特殊的頭信息,類似于Content-Type: multipart/form-data; boundary=${bound}
#注意:這里請求頭也可以自己設置Content-Type信息,用于自定義boundary
r = requests.post(url, data=multipart_encoder, headers=headers)
print(r.text)
#注意,不要設置cookies等其他參數,否則會報錯
總結
以上是生活随笔為你收集整理的python表单提交文件_python3做multipart/form-data上传请求的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 32位有符号整数_[LeetCode]
- 下一篇: 7z apache解析漏洞_解析漏洞(W