重点:
- data : 通过抓包获取禅道登录接口的webForm,获取需要传入的body,即data
login_data = {
'account': **,
'password':**, #加密
'passwordStrength': '1',
'referer': '/zentao/',
'verifyRand': **,
'keepLogin': '1',
'captcha':''
}
- 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
}
- 密码加密
- 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()