-
文章目录
场景
使用requests实现文件上传的接口自动化。
接口的请求类型为:Content-Type:multipart/form-data;
接口入参存在一个数据类型为file的参数。如下:
requests基础知识
- 4个requests传参类型:
parmas: 传递查询字符串参数(常用于get请求)
data: 传递表单类型的参数(参数类型为:Content-Type:application/x-www-form-urlencoded)
json: 传递json类型的参数(参数类型为:Content-Type:application/json)
files: 用于上传文件(参数类型: content-type:multipart/form-data;)
上传文件的的接口参数的类型为content-type:multipart/form-data,那么我们使用requests来发送请求的时候,接口中文件上传的参数需要使用files来传递。files参数格式如下:
files = {
"file": ("test.xlsx", open("D:\\test.xlsx", "rb"), "application/octet-stream")
}
# 或者
files = {
"pic": ("test.gif", open("D:\\test.gif", "rb"), "images/gif")
}
注意:
- files为字典类型数据,上传的文件为键值对的形式:入参的参数名作为键,参数值是一个元组,内容为以下格式(文件名,打开并读取文件,文件的content-tpye类型)
- 除了上传的文件,接口其他参数不能放入files中,使用data传递即可。
解决方案
完整的请求代码如下:
import requests
# 请求url
url = "https://127.0.0.1/upload"
# 请求头
headers = {
"Authorization": "bearer abcde"
}
# 上传文件的参数
files = {
"file": ("test.xlsx", open("D:\\test.xlsx", "rb"), "application/octet-stream")
}
# 其他参数
data = {
"id": "1585171115599216642"
}
# 发送请求
response = requests.post(url=url, headers=headers, files=files, data=data)
# 打印结果
print(response.text)
运行以上代码,结果如下:
{‘datas’: True, ‘code’: 200, ‘msg’: ‘SUCCESS’}