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

该博客展示了如何利用Python的requests库实现对禅道(Zentao)系统的自动化登录。通过抓包获取登录接口的必要参数,包括加密后的密码、sessionId等,并创建相应的headers和data。代码中详细解释了每个步骤,包括密码的MD5加密过程,以及如何构造和发送POST请求以完成登录操作。
摘要由CSDN通过智能技术生成

重点:

  1. data : 通过抓包获取禅道登录接口的webForm,获取需要传入的body,即data
login_data = {
                'account': **,
                'password':**,  #加密
                'passwordStrength': '1',
                'referer': '/zentao/',
                'verifyRand': **,
                'keepLogin': '1',
                'captcha':''
        }
  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. 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()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值