在接口测试的过程中,会遇到一些文件上传的接口,一般我们可以读取文件后,将其作为post的一个参数,直接实现文件的上传。例如:

with open('massive-body') as f:requests.post('http://some.url/streamed', data=f)

更多的时候,遇到的是及包含表单数据,也包含需要上传的文件。抓取接口,会看到接口的请求实体中有“Content-Type: multipart/form-data; boundary=xxx”,接口的表单参数样式也比较奇怪。

临时补充一下Content-Type的知识:

在 HTTP/1.1 协议中,使用 POST 请求提交数据时常用的 Content-Type 有以下几种:

  • application/x-www-form-urlencoded 原生 Form 默认的提交方式,
    最常用的一种,支持GET/POST等方法。主要把数据编码成键值对的方式, 并且把特殊字符转义成 utf-8 字符,如空格会被转义成%20。
  • application/json 由于 JSON 格式所表示的结构化数据远比键值对复杂得多,所以使用 JSON系列化之后的字符串进行数据交换的方式越来越受人们青睐。特别适合 RESTful 类型的接口。 text/xml 使用 XML-RPC(XML Remote Procedure Call) 协议进行数据传输,相比于 JSON 的方式更为臃肿。
  • multipart/form-data 使用 Form 提交小文件, 直接把文件内容放在Body中进行传输的方式。考虑到同时上传多个字段或文件,所以需要按照一定规则随机生成或手动指定一个 boundary用于分割数据,然后按照一定格式、顺序进行排列构成完整的 Body 进行传输。

继续回到抓取的的接口,接口中数据按照请求中的boundary将数据进行分割,同时还可以看到上传文件中的数据内容。

对应点的接口脚本应该写成下面的样子:

def Uploadfile(session, file_path='ids-10.csv', category='SF', value='SF', update_rule=1, creator_name='admin', creator_mail='admin@vpgame.cn' ):"""通过文件上传,完成用户分群:param session: 因为接口需要cookie,所以使用了session对象:param file_path: 存放uid的csv文件:param category: 标签:param value: 标签值:param update_rule:更新规则,默认永不更新:param creator_name: 创建用户名:param creator_mail: 创建用户邮箱:return:"""paths = 'api/bigquery/tag'url = console_url_api + '/' + pathsheaders.update({'Accept': 'application/json' })files = {'file': open(file_path, 'rb')}values = {'update_rule': update_rule, 'value': value, 'category': category,"creator_name":creator_name,"creator_mail":creator_mail}res = session.post(url, data=values, files=files, headers=headers)return res

再多说一句。在 requests 中数据编码时,只有 data 参数为 None 时才会判断使用 json 参数,所以 data 和 json 两个参数同时存在时,只会编码 data 的数据;但 datafiles 是可以同时存在的,而且只要有 files 存在,其它键值对数据也会一起使用 multipart/form-data 的编码方式生成 body 数据

python实现Content-Type: multipart/form-data; boundary=xxx接口的调用相关推荐

  1. 报错Content type ‘multipart/form-data;boundary=----WebKitFormBoundaryTz0sivpVO7U0H70m;charset=UTF-8‘ n

    最近在做一个图片上传,遇到这了这种情况,在入参 body 中同时传入文件和其它参数信息结果出现如题异常. 特别在此记录解决办法,以供大家参考. method="post"必须事po ...

  2. Content type ‘multipart/form-data;boundary=解决方案

    记录一个小问题 今天在用postman调试接口,发送请求的时候没进入断点就报错" Content type 'multipart/form-data;boundary=----------- ...

  3. 使用postman传递参数时报错:Content type ‘multipart/form-data;boundary=--(略)

    原因是项目配置需要使用json格式参数, 因此在post方式下,在body中选择raw,然后填写json格式参数即可,如下 不同项目配置参数提交的方式也不同,因此遇到此类问题时可以尝试使用其他提交方式 ...

  4. 使用postman post请求查数据Content type ‘multipart/form-data;boundary=--------------------------843014042341

    原因是项目配置需要使用json格式参数,因此在post方式下,在body中选择raw,然后填写json格式参数即可,如下

  5. 上传文件报错:Content type ‘multipart/form-data;boundary=----WebKitFormBoundarypJygPIIxqzTHmtkQ;charset=...

    @ReponseBody不支持form-data,所以要接收带有文件的form-data有3种方式. 方式一: @PostMapping("upload") public Stri ...

  6. HttpMediaTypeNotSupportedException:Content type 'multipart/form-data;boundary=W10Jdm..'not supported

    最近在做一个excel导入的功能.在入参 body 中同时传入文件和其它基本信息结果出现如题异常.在此记录下解决办法.以做记录. org.springframework.web.HttpMediaTy ...

  7. message: Content type 'multipart/form-data;boundary=----WebKitFormBoundaryksbSBUwTCB6eHI3j;charse

    postman 发送post请求出现错误:"message": "Content type 'multipart/form-data;boundary=----WebKi ...

  8. Content type 'multipart/form-data;boundary=--------------------------496238283102520395700876;解决方案

    Content type 'multipart/form-data;boundary=--------------------------496238283102520395700876;解决方案 在 ...

  9. Content type 'multipart/form-data;boundary=--------------------------258075776767858126421870;chars

    记录一下小错误,今天用postman测试添加接口时报错,想传一个实体到接口,便选了一个Headers Body使用form-data 便出现了标题的错误 "msg": " ...

最新文章

  1. 【C++】【一】结构体数组
  2. PMCAFF微课堂 | 京东核心团队揭秘:业务增长10倍背后的敏捷开发秘籍
  3. mysql最大述_mysql最大字段数量及 varchar类型总结
  4. kafka python_kafka python
  5. Python版冒泡法排序算法
  6. C++之指针探究(十六):typedef结合函数指针
  7. 测试里程突破 1000 万英里,但 Waymo 的商业模式真的万无一失?
  8. CSS属性小结之--半透明处理
  9. Windows下命令(bat可用)
  10. 转:Python yield 使用浅析
  11. 二、Vue菜鸟小教程-vue-router的简单入门程序
  12. SpringBoot集成Swagger文档及自定义访问路径
  13. python爱心代码简单教程
  14. perl/tk_在Perl / Tk中使用高级小部件
  15. 佛祖保佑永无BUG 代码 (各种样式)
  16. 共享花店App开发亮点解析
  17. 竞价推广效果不好,是哪些方面影响的呢?
  18. Excel 2003、2010表格内取消Alt+Enter的换行符的方法
  19. @Autowired的原理简识
  20. Unity 游戏区域性崩溃,深藏的国际化巨坑

热门文章

  1. 时空穿梭 探寻高端存储架构的前世今生
  2. c语言冷门小知识,生活中的冷门小知识有哪些
  3. 池水含盐问题C++仿真
  4. 解决Windows 11网络连接问题:教你轻松排查网络故障
  5. 【网络教程】群晖中如何安装甜糖,手把手教您Docker安装甜糖,如何解决甜糖安装使用中遇到的问题(已解决)
  6. mysql数据库所有版本安装包下载地址
  7. conda 配置清华源
  8. NISP一级考试相关知识点
  9. 机器学习:sklearn实现心脏病预测
  10. GitHub 优秀的 Android 开源项目 转自http://blog.csdn.net/shulianghan/article/details/18046021