requests- 处理 multipartform-data 类型的上传接口

multipart/form-data类型的上传接口

我们在做接口测试工作时,会遇到含有文件上传的接口。

抓到的上传接口的信息大概是以下这样子:

请求体的content-type为:
multipart/form-data; boundary=---------------------------(一堆数字)

请求体当中,除了有要上传的文件以外,还有其它的数据字段。

在下面的请求体截图当中,含有以下字段:

id: 文件的id

name: 文件的名字

type: 文件的类型。如果是图片则是image/png。若是图中的文本文件,则为application/octet-stream

lastModifiedDate:上一次修改时间。截图中为当前时间点

size: 文件的大小

file: 有文件名、文件类型、文件内容3项内容。

这样的接口,用requests如何来发送呢?

requests的requests_toolbelt模块处理multipart/form-data
1、安装requests_toolbelt

pip命令: pip install requests_toolbelt

2、导入requests_toolbelt下的MultipartEncoder类

from requests_toolbelt import MultipartEncoder

3、MultipartEncoder类应用

3.1 处理请求体

MultipartEncoder类,有一个fields参数,用来传递请求数据以及文件。

在实例化MultipartEncoder类,传递fields

fields: 字典类型。将请求数据放在此参数中

key为下图中的name的值。下图中的key分别为:id,name,type,lastModifiedDate,size,file

对于key为file的,它的值为一个元组:(文件名称,文件流对象(binary模式打开文件),文件类型)。

示例:"file":("chromedriver.log", open(file_path,"rb"), "application/octet-stream")})

上传文本文件的代码(实例化MultipartEncoder):

filesize = os.path.getsize(file_path) # 获取文件大小 m = MultipartEncoder(fields={"id":"lemon66", "name":"chromedriver.log", "type":"application/octet-stream", "lastModifiedDate":"Mon Nov 30 2020 20:21:44 GMT+0800 (中国标准时间)", "size":str(filesize), "file":("chromedriver.log",open(file_path,"rb"),"application/octet-stream")})

上传图片的代码(实例化MultipartEncoder):

# 上传文件为图片:图片类型不一样。 file_path = 'D:\\BaiduNetdiskDownload\\lemon_log_1.png' filesize = os.path.getsize(file_path) # 获取文件大小 m = MultipartEncoder(fields={"id":"lemon66", "name":"xiaojian.png", "type":"image/png", "lastModifiedDate":"Mon Nov 30 2020 20:21:44 GMT+0800 (中国标准时间)", "size":str(filesize), "file":("xiaojian.png",open(file_path,"rb"),"image/png")})

3.2 处理请求头的content-type

content-type要包含boundary。MultipartEncoder类定义了属性:content_type。

我们在代码当中,直接使用它的content-type来设置即可。

m = MultipartEncoder(fields={"id":"lemon66", "name":"chromedriver.log", "type":"application/octet-stream", "lastModifiedDate":"Mon Nov 30 2020 20:21:44 GMT+0800 (中国标准时间)", "size":str(filesize), "file":("chromedriver.log",open(file_path,"rb"),"application/octet-stream")}) # content-type # m.content_type # 发送上传文件的请求: resp = s.post(upload_url,data=m,headers={'Content-Type': m.content_type})

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

  • 30
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用提供了一种在Python3下使用requests库发送multipart/form-data类型请求的方法。这种类型的请求是用于上传文件或发送二进制数据的常见方式。通过使用requests库的post方法,将请求的URL和请求的参数以字典的形式传入即可发送multipart/form-data类型的请求。引用介绍了使用requests库发送application/x-www-form-urlencoded请求数据的方法。这种类型的请求常用于提交表单数据。通过使用requests库的post方法,将请求的URL和请求的参数以字典的形式传入即可发送application/x-www-form-urlencoded类型的请求。引用给出了一个示例函数client_post_mutipart_formdata_requests,该函数可以用于发送multipart/form-data类型的请求,并接收请求的URL和请求的参数作为参数。综上所述,要使用Pythonrequests库发送multipart/form-data类型的请求,可以使用post方法,并将请求的URL和请求的参数以字典的形式传入。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python使用requests发送multipart/form-data请求数据](https://blog.csdn.net/weixin_39638048/article/details/110763239)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值