python表单提交文件_python3做multipart/form-data上传请求
http協(xié)議本身的原始方法不支持multipart/form-data請(qǐng)求,這個(gè)請(qǐng)求由原始方法演變而來的。multipart/form-data的基礎(chǔ)方法是post,也就是說是由post方法來組合實(shí)現(xiàn)的
請(qǐng)求頭必須包含一個(gè)特殊的頭信息:Content-Type,必須為multipart/form-data,同時(shí)還一個(gè)內(nèi)容分割符 (boundary) 用于分割請(qǐng)求體中的多個(gè)post的內(nèi)容。因?yàn)榻邮辗浇馕龊瓦€原文件必須要根據(jù)這個(gè)boundary。
也就是說,具體的頭信息必須包含如下設(shè)置:
Content-Type: multipart/form-data; boundary=${bound}
例子:
import os, random, sys, requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
#請(qǐng)求地址
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 = {
#這里根據(jù)服務(wù)器需要的參數(shù)格式進(jìn)行修改
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
#請(qǐng)求頭必須包含一個(gè)特殊的頭信息,類似于Content-Type: multipart/form-data; boundary=${bound}
#注意:這里請(qǐng)求頭也可以自己設(shè)置Content-Type信息,用于自定義boundary
r = requests.post(url, data=multipart_encoder, headers=headers)
print(r.text)
#注意,不要設(shè)置cookies等其他參數(shù),否則會(huì)報(bào)錯(cuò)
總結(jié)
以上是生活随笔為你收集整理的python表单提交文件_python3做multipart/form-data上传请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 32位有符号整数_[LeetCode]
- 下一篇: python boxplot pvalu