zoukankan      html  css  js  c++  java
  • 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('登录失败!!')
  • 相关阅读:
    【转-整理】Eclipse中Maven项目创建
    Python错误——failed to execute pyi_rth_pkgres
    linux使用——创建用户、设置密码、设置SSH远程秘钥登录
    Javascript数组——some()、every()、forEach()遍历区别
    linux使用——nohup不起作用
    IDEA操作——Intellij IDEA 无法找到引入的包和类
    mysql中批量update数据
    获取中国标准的本周日期
    tomcat下配置https环境
    mysql中创建远程用户并授权,得以在本地代码中运行远程数据库
  • 原文地址:https://www.cnblogs.com/qican/p/14386172.html
Copyright © 2011-2022 走看看