python中实现form-data请求,传多个附件问题
日常工作中遇到了form-data请求方式,记录日常问题解决方式
import json
import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder
def post_form_data():
# url地址,虚拟地址,请更换成真实地址
form_data_url = 'https://form.data.url.com'
# 例如,form_data中,我们需要添加一个key-value值,key='data',value值是一个json对象,传参的Content-Type为json
data = {
"name":"form-data",
"code": 123456
}
# 首先把data进行json化
data_json = json.dumps(data)
#1、 如果是form-data中传入附加:
encoder = MultipartEncoder(
fields={
'data': ('', data_json, 'application/json'),
})
#2、添加data_json参数的同时添加单个附件,以下是单个key添加单个附件,可以添加多个key,每个key对应一个附件:
encoder = MultipartEncoder(
fields={
'data': ('', payload, 'application/json'),
'files': ('excel文件.xls', open('C:/Users/excel文件.xls', 'rb').read(), 'application/octet-stream'),
},
)
#3、添加data_json参数的同时添加多个附件,这里是form-data中一个files的key添加多个value的附件
fields = [("data", ('',payload, 'application/json')),
("files",('excel数据.xls', open('C:/Users/excel数据.xls', 'rb').read(), 'application/octet-stream')),
("files",('文本数据.txt', open('C:/Users/文本数据.txt', 'rb').read(), 'application/octet-stream'))]
encoder = MultipartEncoder(fields=fields)
# 设置请求头
headers = {
'Content-Type': encoder.content_type
}
# 进行请求数据
res = requests.post(msg_url, headers=headers, data=encoder)