软件定制开发供应商python实现Content-Type: multipart/form-data; boundary=xxx接口的调用

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

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

更多的时候,遇到的是及包含表单数据,也包含需要上传的文件。抓取接口,会看到接口的请求实体中有“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 + '/' + paths    headers.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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发