前言
大家常用的bug管理工具大多数都是禅道,jira。今天介绍下,如何用过requests的方法进行登录禅道
抓取登录状态
通过fiddler进行抓取登录禅道过程
通过抓包可以获取一些内容,登录接口地址,登录请求方式,登录时的账号名,密码,这时候会发现,登录的账号名和密码和我们输入的不一样,初步想法,可能这个地方进行了加密。但是具体什么加密怎么加密的不清楚,这里安静先通过请求这个登录,获取登录页面的内容。
import requests url = 'http://127.0.0.1/pro/user-login.html' r = requests.get(url) print(r.content.decode('utf-8'))
通过查看打印结果,我们可以看出来加密内容(请求参数内容)
通过多次请求抓包我们已经知道了每次登录更换的参数只有verifyRand和password进行改变,而password的值通过加密也是和verifyRand进行关联的。首先找到verifyRand的值,我们继续在我们的请求返回内容中找
这里我们可以通过正则表达式的方式进行提取出来value的值。
import requests import re url = 'http://127.0.0.1/pro/user-login.html' r = requests.get(url) verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)' />",r.content.decode('utf-8')) print(verify)
接下来就是参数加密的问题了,前面已经介绍过了,requests---requests请求加密接口,通过上面的内容可以发现password是通过了2层加密,先对密码进行加密,然后把加密的内容加上verifyRand的值再次进行加密,获得最后的结果。
# 第一次加密密码 pwd1md5 = hashlib.md5() pwd1md5.update(password.encode('utf-8')) pwd1_result = pwd1md5.hexdigest() # 第2次加密 pwd2md5 = hashlib.md5() pwd2md5.update((pwd1_result+verify).encode('utf-8')) pwd2_result = pwd2md5.hexdigest()
加密密码获取到后,就直接可以进行请求登录的接口地址,然后完成登录。这里我们通过session的形式进行完成登录,因为登录后我们想要去测试页面。最后通过判断是否进入了测试页面来判断是否登录成功。
body = { "account": user, "password": pwd2_result, "passwordStrength": 1, "referer": "/pro/", "verifyRand": verify, "keepLogin": 0, } r = s.post('http://127.0.0.1/pro/user-login.html', data=body) # 访问测试页面 test = s.get("http://127.0.0.1/pro/qa/") if "测试主页" in test.text: print('登录成功!!') else: print('登录失败!!')
通过结果肯定知道,是登录成功的。下面附上完整代码
完整代码
import requests import re import hashlib s = requests.session() user = 'admin' password = 'test821006052' url = 'http://127.0.0.1/pro/user-login.html' r = s.get(url) verify = re.findall(r"name='verifyRand' id='verifyRand' value='(.*?)' />", r.content.decode('utf-8'))[0] # 第一次加密密码 pwd1md5 = hashlib.md5() pwd1md5.update(password.encode('utf-8')) pwd1_result = pwd1md5.hexdigest() # 第2次加密 pwd2md5 = hashlib.md5() pwd2md5.update((pwd1_result+verify).encode('utf-8')) pwd2_result = pwd2md5.hexdigest() body = { "account": user, "password": pwd2_result, "passwordStrength": 1, "referer": "/pro/", "verifyRand": verify, "keepLogin": 0, } r = s.post('http://127.0.0.1/pro/user-login.html', data=body) # 访问测试页面 test = s.get("http://127.0.0.1/pro/qa/") if "测试主页" in test.text: print('登录成功!!') else: print('登录失败!!')