• requests---登录禅道


    前言

      大家常用的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('登录失败!!')
  • 相关阅读:
    DIV+CSS规范命名大全集合
    display:none与visibility:hidden的区别
    为什么无法发起qq临时会话,必须添加好友?如何设置才能临时会话?
    gif动态图片去白边,杂边
    【原创】[PS技巧]如何制作翘角纸条的阴影效果
    ......那么Win8.1怎么去掉文件夹?
    Win8增加了快速启动功能......
    不间断图片滚动JS
    FlatList
    react native 布局
  • 原文地址:https://www.cnblogs.com/qican/p/14386172.html
Copyright © 2020-2023  润新知