一、下载第三方包
pip install requests_toolbelt
二、模块调用
from requests_toolbelt import MultipartEncoder
三、准备参数、处理请求头、发送请求
-
MultipartEncoder 共有三个参数:fields、boundary、encoding,其中field必传,需要传入接口入参,boundary选填,可以自己生成,也可以不设置,会自动生成;encoding默认utf-8。
-
fields的参数为{"file":("file_name","rb_file","文件格式")},注意file的值为元祖格式。存在多个参数的话需要把其他参数作为field对应字典中的其他键值对一起传入。
- excel 的文件格式为:"application/vnd.ms-excel"
- 图片 的文件格式为:"image/jpeg"
以我个人的项目为例:
- boundary需要生成 '----WebKitFormBoundaryPH6ZaA4wuABDm9BK'格式
- 文件上传入参存在多个字段
代码如下:
import random
import string
import requests
from requests_toolbelt import MultipartEncoder
def __handle_file_data(self, data, url):
# 定义文件名称
filename = f"autotest_{self.fk.random_int(min=10000, max=99999)}.xlsx"
# 生成boundary
boundary = '----WebKitFormBoundary' + ''.join(random.sample(string.ascii_letters + string.digits, 16))
# 读取二进制文件
with open(file="文件路径", mode="rb") as file:
excel = file.read()
"""
1 删除data中的file字段
2 单独生成file的键值
3 将file_data与data拼接在一起,生成新的data
"""
del data['file']
file_data = {"file": (filename, excel, "application/vnd.ms-excel")}
file_data.update(data)
# 将入参处理成文件上传模块需要的格式,其中file的值为元祖格式,元祖中第一个参数为文件名(可自定义),第二个参数是二进制文件,第三个参数为文件格式
new_data = MultipartEncoder(fields=file_data, boundary=boundary)
# 设置文件上传专用请求头
self.headers["Content-Type"] = new_data.content_type
# 发送请求
response = requests.request(method=method, url=url, data=data, headers=self.headers, **kwargs)
return response
欢迎来到testingpai.com!
注册 关于