Python接口自动化(八) python登录禅道11.4.1版本实战
一、需要使用requests下的会话对象;
会话对象让你能够跨请求保持某些参数。它也会在同一个Session实例发出的所有请求之间保持cookie。
方法级别的参数不会被跨请求保持。
参考:https://requests.readthedocs.io/zh_CN/latest/user/advanced.html#session-objects
二、查看禅道源码,发现需要对密码、rand进行md5加密,且在登录时,需要传入变量verifyRand;下图可以确定rand==verifyRand;
三、提取rand;通过fiddler抓包,发现登录页面有rand值,但通过接口请求的rand值的长度不固定,目前发现长度有9位、10位的;
所以判断提取的长度为10时,则不再请求登录接口;
四、md5加密密码、rand
import hashlib #方式一 hash=hashlib.md5() hash.update('P@ssw0rd'.encode('utf-8'))#不添加.encode('utf-8')会报错 f=hash.hexdigest()+str(1268292672)#web登录,fiddler抓包到的rand值 #print(f) #方式二 hash2=hashlib.md5(f.encode('utf-8')) s=hash2.hexdigest() print(s)#查看加密后的值与fiddler传递的密码应该是相同的
五、判断登录是否成功;
fiddler抓包查看登录成功的响应内容,发现不太容易判断,所以再次请求一个其他页面,判断是否有退出;
fiddler抓包http://localhost/zentaopms/www/bug-browse-6.html请求,部分响应内容如下;
六、登录禅道参考代码
# 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("登录成功")
运行结果截图如下:
越努力,越幸运!!!
good good study,day day up!!!