前言
在提交表单操作的时候,经常会遇到图片上传的操作,图片上传是一个单独的接口,本篇以禅道为例,介绍如何上传图片
上传接口
1.以禅道上提交bug为例,在选择图片时,点确定按钮,就是上传图片了。
2.用fiddler抓包,查看抓到的接口,以下这种接口就是multipart/form-data
先登录
1.因为上传图片是在登录之后操作的,这个需要依赖用户登录
登录需要先访问一次url,提取rand值,然后对rand和原密码进行md5加密。
上传图片
1.上传图片以下这种格式:
2.写成字典格式,key对应name="imgFile"中的"imgFile"
3.value里面是一个元组()
- 第一个参数是filename=后面对应的值,没有就写None
- 第二个是上面的这个值“2.png",或者是”文件open打开的二进制流。备注:尝试使用“2.png”,可以生成url,但访问url无图片
- 第三个是Content-Type对应的类型,如“image/png”
f={
"localUrl":(None,"33.png"),
"imgFile":("33.png",open("33.png","rb"),"image/png")
}
验证是否上传成功
1.获取上传后的地址,放到浏览器的地址栏请求下,看是不是刚才上传的图片
参考代码
注意:上传图片是files参数
# coding:utf-8
import requests
import re
import hashlib
pw="P@ssw0rd"
s=requests.Session()
headers={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36"
}
vrand=0
while(True):
rs1=s.get("http://localhost/zentaopms/www/user-login.html",headers=headers)
rs1.encoding='utf-8'
#print(rs1.text)
rand=re.findall(r"'verifyRand' value='(.+?)'",rs1.text)
#print(rand[0])
if len(rand[0])==10:
vrand=rand[0]
break
print(vrand)
#方式一
hash=hashlib.md5()
hash.update(pw.encode('utf-8'))
f=hash.hexdigest()+vrand
#print(f)
#方式二
hash2=hashlib.md5(f.encode('utf-8'))
pwd=hash2.hexdigest()
print(pwd)
data={
"account":"fuhui",
"password":pwd,
"referer":"http://localhost/zentaopms/www/bug-browse-6.html",
"verifyRand":vrand
}
rs2=s.post("http://localhost/zentaopms/www/user-login.html",headers=headers,data=data)
rs2.encoding='utf-8'
#print(rs2.text)
rs3=s.get("http://localhost/zentaopms/www/bug-browse-6.html",headers=headers)
rs3.encoding='utf-8'
#print(rs3.text)
result=re.findall(r"\<a href=\'\/zentaopms\/www\/user-logout.html' \>(.+?)\<\/a\>",rs3.text)
print(result)
if result[0]=="退出":
print("登录成功")
#上传图片
urlp="http://localhost/zentaopms/www/file-ajaxUpload-5f2b5bf056387.html?dir=image"
f={
"localUrl":(None,"33.png"),
"imgFile":("33.png",open("33.png","rb"),"image/png")
}
rp=s.post(urlp,files=f)
rp.encoding="utf-8"
try:
purl="http://localhost"+rp.json()["url"]
print("上传图片后,图片的url:{}".format(purl))
except Exception as msg:
print("返回值不是json格式的,错误为:{}".format(msg))
#print(rp.content)
#print(rp.text.encode("utf-8").decode("unicode_escape"))