requests---requests上传图片
阅读原文时间:2023年07月08日阅读:1

  我们在做接口测试的时候肯定会遇到一些上传图片,然后进行校验,今天我们一起学习通过requests上传图片,查看是否上传成功

抓取上传接口

这里我以百度为例子进行操作,为啥要用百度呢,主要上传文件比较简单不用登录啥的~~~通过fiddler抓取上传图片的接口地址以及请求携带的参数内容

通过下面操作进行选择图片进行上传,然后通过fiddler进行分析接口内容

通过分析抓取的内容,我们可以看到接口地址为:“https://graph.baidu.com/upload”

请求的参数类型为from-data,这个类型后面会具体的介绍,这里先不具体说了,这里不影响我们操作

参数格式

这里在插个知识点,就是requests文档中有对上传文件单独书写,我们可以按照他们的标准进行书写详细的可以进行查看requests官方文档

参数书写情况为:

# 123.jpg为图片,与代码在当前目录下,image/jpeg 为图片格式
files = {
"tn":"pc",
"image":("123.jpg",open('123.jpg','rb'),"image/jpeg"),
"from":"pc",
"image_source":"PC_UPLOAD_SEARCH_FILE",
"range":'{"page_from": "searchIndex"}'
}

请求上传图片

选择图片

# coding:utf-8
import requests
url = "https://graph.baidu.com/upload"
files = {
"tn":"pc",
"image":("123.jpg",open('123.jpg','rb'),"image/jpeg"),
"from":"pc",
"image_source":"PC_UPLOAD_SEARCH_FILE",
"range":'{"page_from": "searchIndex"}'
}
r = requests.post(url,files=files)
print(r.json())

通过查看返回,点击链接进入到百度识图中

但是当我们点击进去后会发现浏览器好像放大了我们的页面一样,这是什么鬼?哪里出错误了吗?

原来是我们在填写数据的时候数据的格式写错了,有一些参数没有添加,我们要表示为None

# 每个value其实都是有2个参数,只是其中一个没有,那么如果我们不穿的话就会出现刚才的问题,这个是需要传None
files = {
"tn":(None,"pc"),
"image":("123.jpg",open('123.jpg','rb'),"image/jpeg"),
"from":(None,"pc"),
"image_source":(None,"PC_UPLOAD_SEARCH_FILE"),
"range":(None,'{"page_from": "searchIndex"}')
}

通过修改后的链接,我们再一次取请求,查看这次的情况,发现是好的,突然感叹到python太强大了~~

通过一个小的例子,我们学习了如何通过requests发送from-data的数据类型,但是如果想要上传大文件,需要安装第3方库,这个我们下次在一起学习~持续更新中~

如果感觉写的对您有帮助,可以右下角点击个关注哦~~点关注,不迷路。