- 前言:我们在做接口测试的时候肯定会遇到一些上传图片,然后进行校验,今天我们一起学习通过requests上传图片,查看是否上传成功
- 下面是上传图片,抓包结果
- 如何使用requests模拟这种场景呢?下面介绍两种方法
- 方法1:使用requests模块POST方法
- 首先看下官方介绍
headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}
if __name__ == '__main__':
# 保持会话
s = requests.session()
# 登录
login(s)
#获取token
url = 'http://xxxxxx/xadmin/apiapp/fileimage/'
r = s.get(url)
token = re.findall("name='csrfmiddlewaretoken' value='(.*?)' />",r.text)
payload = {
"csrfmiddlewaretoken":token[0],
"title":"tup0729-02"
}
files = [
('image',('tu.png',open('tup.png','rb'))),
]
url2 = 'http://xxxxxx/xadmin/apiapp/fileimage/add/'
r = s.post(url2,headers = headers,data = payload,files = files)
print(r.text)
- 思考:传多个文件的时候如下,这两个参数的name都是一样的,如果用字典去传key值,很显然python的key值是不能重复的
Content-Disposition: form-data; name="files[]"; filename="1.png"
Content-Type: image/png
Content-Disposition: form-data; name="files[]"; filename="2.png"
Content-Type: image/png
#-------------多个文件用list类型------------
file = [
("files[]", ("2.png", open("1.png", "rb"), "image/png")),
("files[]", ("2.png", open("2.png", "rb"), "image/png")),
]
- 方法2:第三方模块 requests_toolbelt
- 环境安装:pip install requests-toolbelt
# multipart/form-data传文件
from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(
fields={'field0': 'value',
'field1': 'value',
'field2': ('文件名称', open('文件地址/file.py', 'rb'), 'text/plain')}
#"file": ("xxxx.jpg", image, "image/jpeg") 图片
)
r = requests.post('http://httpbin.org/post',
data=m,
headers={'Content-Type': m.content_type})
# multipart/form-data表单提交(传非文件)
from requests_toolbelt import MultipartEncoder
import requests
m = MultipartEncoder(
fields={'field0': 'value',
'field1': 'value'})
r = requests.post('http://httpbin.org/post',
data=m,
headers={'Content-Type': m.content_type})
- fields 参数既可以传字典也可以传list(上传多个文件的时候使用list)
- 下面直接上代码吧
from requests_toolbelt import MultipartEncoder
if __name__ == '__main__':
# 保持会话
s = requests.session()
# 登录
login(s)
#获取token
url = 'http://49.235.92.12:7005/xadmin/apiapp/fileimage/'
r = s.get(url)
token = re.findall("name='csrfmiddlewaretoken' value='(.*?)' />",r.text)
m = MultipartEncoder(
fields=[
("csrfmiddlewaretoken",token[0]),
("csrfmiddlewaretoken",token[0]),
("title", "tup1113-01"),
("_save", ""),
("files",""),
("image",('tup.png', open('tup.png','rb'), "image/png"))
],
# fields={
# "csrfmiddlewaretoken": token[0],
# "title": "附件002",
# "_save": "",
# "files": ('tup.png', open('tup.png', 'rb'), "image/png"),
# "image": ""
# }
)
url2 = 'http://49.235.92.12:7005/xadmin/apiapp/fileimage/add/'
r = s.post(url2,
data=m,
headers = {"content-type":m.content_type}
)
print(r.text)