requests解决 multipart/form-data文件上传的两种方式

multipart/form-data 如何用requests发送请求

requests 传参类型:

requests 模块传参有四种方式:params、data,、JSON 和 files。接下来给大家详细讲解一下 requests 模块中这几种传参方式的区别。

  • parmas: 传递查询字符串参数(常用于 get 请求)
  • data: 传递表单类型的参数(参数类型为:Content-Type:application/x-www-form-urlencoded)
  • json: 传递 JSON 类型的参数(参数类型为:Content-Type:application/json)
  • files: 用于上传文件(参数类型: content-type:multipart/form-data;)

postman如何测试文件上传接口,点击send下面的 Code可以选择python语言可以看到requests发请求的样本

image.png

上传文件的的接口参数的类型为 content-type:multipart/form-data,那么我们使用 requests 来发送请求的时候,接口中文件上传的参数需要使用 files 来传递。files 参数格式如下

第一种方式:通过requests的post方法参数传入files

# fiels为字典类型数据,上传的文件为键值对的形式,参数名作为键,
# 参数值是一个元组,内容为以下格式(文件名,打开的文件流,文件类型)
files = {
    "pic": ("test.gif", open("test.gif", "rb"), "images/git")
}
# 注意点:除了上传的文件,接口其他参数不能放入files中

import requests

# 如何请求文件上传的接口
url = "http://127.0.0.1:8080/upload"

# 上传的文件参数
files = {
    "pic": ("test.gif", open("test.gif", "rb"), "images/git")
}
# 其他的参数
data = {
    "nickname": "阿登",
    "age": 28,
    "sex": "男",
}
# 发送请求
response = requests.post(url=url, files=files, data=data)
# 打印结果
print(response.json())

第二种通过第三方库 requests-toolbelt

requests-toolbelt第三库的类 MultipartEncoder去处理 multipart/form-data

需要安装pip install requests-toolbelt

官方文档

https://toolbelt.readthedocs.io/en/latest/user.html#multipart-form-data-encoder

import requests

# 如何请求文件上传的接口
url = "http://127.0.0.1:8080/upload"

# 请求参数
data = MultipartEncoder(
    fields={"nickname": "阿登", "age": 28,"sex": "男",
            "pic": ("test.gif", open("test.gif", "rb"), "images/git")}
    )
# 构造请求头
 headers={'Content-Type': data.content_type}
# 发送请求
response = requests.post(url=url,data=data,headers=headers)
# 打印结果
print(response.json())

你可能感兴趣的:(requests解决 multipart/form-data文件上传的两种方式)