• [接口自动化] 禅道登录 Python+requests[纯代码]


    重点:

    1. data : 通过抓包获取禅道登录接口的webForm,获取需要传入的body,即data
    login_data = {
                    'account': **,
                    'password':**,  #加密
                    'passwordStrength': '1',
                    'referer': '/zentao/',
                    'verifyRand': **,
                    'keepLogin': '1',
                    'captcha':''
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. headers : 抓包取禅道登录接口,request中的heards
    headers_base = {
            'X-Requested-With': 'XMLHttpRequest',
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Cookie':setcookie
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 密码加密
    2. cookie中的sessionId

    代码如下:

    #coding=utf-8
    import requests
    import re
    import hashlib
    
    class Zentao():
        def __init__(self):
            self.session = requests.session()
            self.baseurl = "http://×××/zentao/user-login.html"
            self.randomurl = "http://×××/zentao/user-refreshRandom.html"
            self.account = "×××"
            self.password = "×××"
            self.sessionid, self.rand = self.get_sessionid_rand()
    
        def md5_key(self,str):
            m = hashlib.md5()
            b = str.encode(encoding='utf-8')
            m.update(b)
            return m.hexdigest()
    
        def get_sessionid_rand(self):#获取sessionid和随机数
            response = self.session.get(url=self.randomurl)
            getrandom = response.content
            setcookies = response.headers['Set-Cookie']
            result = re.search('zentaosid=(.*?);',setcookies)
            return result.group(1),getrandom
    
        def get_session_id(self):
            response = self.session.get(url=self.baseurl )
            response.encoding = 'utf-8'
            session_id =  response.headers['Set-Cookie']
            result = re.search('zentaosid=(.*?);',session_id)
            return result.group(1)
    
        def get_pwd(self):
            return self.md5_key(self.md5_key(self.password) + self.rand)
    
        #使用seesion登录,这样的好处是可以在接下来的访问中可以保留登录信息
        def login(self):
            content = self.session.post(self.baseurl, headers = self.get_headers,data = self.get_data)
            print("--------登录详情-----------------")
            print content.text.decode("unicode_escape")
            print("--------登录结束-----------------")
    
        @property
        def get_headers(self):
            setcookie ='lang=zh-cn; device=desktop; theme=default; openApp=my; zentaosid={}'.format(self.sessionid)
            headers_base = {
            'X-Requested-With': 'XMLHttpRequest',
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Connection': 'keep-alive',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Cookie':setcookie
            }
            return headers_base
    
        @property
        def get_data(self):
            passwd =  self.get_pwd()
            login_data = {
                    'account': self.account,
                    'password':passwd,  #加密
                    'passwordStrength': '1',
                    'referer': '/zentao/',
                    'verifyRand': self.rand,
                    'keepLogin': '1',
                    'captcha':''
            }
            return login_data
    
    if __name__ == '__main__':
        zentao = Zentao()
        zentao.login()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
  • 相关阅读:
    kubernetesr进阶--条件化的污点(TaintNodesByCondition)
    IDEA如何运行web程序
    一文搞懂容器运行时 Containerd
    关于缓存一致性协议、MESI、StoreBuffer、InvalidateQueue、内存屏障、Lock指令和JMM的那点事
    最强V8中的快慢属性(图文分解更易理解)
    TPTU: Task Planning and Tool Usage of Large Language Model-based AI Agents
    一文带你学会Linux vi/vim
    给女生说一些关于软件测试职场的一些真实的建议~
    解决Mysql时区问题
    MySQL列大小写敏感
  • 原文地址:https://blog.csdn.net/Lcicada_2021/article/details/126827263