一、下载第三方包
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!
注册 关于