python 登录拉钩
首先模拟登录,思路很真要
1.首先我们要弄清楚服务器是如何处理我们的请求的,如何给我们返回数据的

首先我们观察我们提交的数据,提交请求的方式,如图所示明显我们的密码被服务器给加密了,同时要清楚一点,经过加密的数据的加密方式必定在某个文件中有方法被调用,于是我们可以找到

于是乎我们就可以得知加密方式是md5 加密方式很明显了

于是通过抓包我们发现在login.json 的请求头中有这样两个字段,通过分析它们是动态的我们不能直接加载请求头中直接去发送请求,分析可知

访问这个连接后我们在返回的string中可以通过该正则的方式取到值,在加到我们的请求头中进行请求,这样就可以登录成功了,
分析之后我们可以直接上代码了
#!/usr/bin/env python # _*_ coding:utf-8 _*_ import hashlib import requests import re headers = { 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Pragma': 'no-cache', 'Referer':'https://passport.lagou.com/login/login.html?ts=1517818358492&serviceId=lagou&service=https%253A%252F%252Fwww.lagou.com%252F&action=login&signature=6EB4BF8F73B5A73E6B327148B42529F1', 'Upgrade-Insecure-Requests':'1', 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36' } def deal_passwd(passwd): v = 'veenike' #次处放置伪代码 passwd = 加密(passwd) passwd = 加密(v + passwd + v) return passwd
之后我们要得到的值
X-Anit-Forge-Code:54559207 X-Anit-Forge-Token:93e4d102-1843-42e4-a419-5efc1cb4bae6
def get_token(): token = {} url = 'https://passport.lagou.com/grantServiceTicket/grant.html' request = session.get(url,headers=headers) html = request.content #通过正则来进行匹配得到我们需要的数据 reg1 = ("window.X_Anti_Forge_Token = '[\s\S]{36}'") reg2 = ("window.X_Anti_Forge_Code = '[\d]{8}'") X_Anti_Forge_Token = re.findall(reg1, html)[0].split()[-1][1:-1] X_Anti_Forge_Code = re.findall(reg2, html)[0].split()[-1][1:-1] print X_Anti_Forge_Token,X_Anti_Forge_Code token['X-Anit-Forge-Token'] = X_Anti_Forge_Token token['X-Anit-Forge-Code'] = X_Anti_Forge_Code return token
最后我们可以处理自己的登录函数
def login(user, passwd, captchaData=None, token_code=None): headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Pragma': 'no-cache', 'Referer': 'https://passport.lagou.com/login/login.html?ts=1517818358492&serviceId=lagou&service=https%253A%252F%252Fwww.lagou.com%252F&action=login&signature=6EB4BF8F73B5A73E6B327148B42529F1', 'Upgrade-Insecure-Requests': '1', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36' } password = deal_passwd(passwd) postData = { 'isValidate' : 'true', 'password' : password, # 如需验证码,则添加上验证码 'request_form_verifyCode' : (captchaData if captchaData!=None else ''),#一般没有出现验证码,所以关于处理验证码的部分没有考虑,我们可以尝试把验证码放置到本地进行手动输入,或者借助于第三方打码 'submit' : '', 'username' : user } login_url = 'https://passport.lagou.com/login/login.json' take_token = get_token() #调用我们之前写好的方法,得到我们要的字段 headers.update(take_token)#更新我们的请求头,加上我们去到的字段进行请求 request = session.post(login_url,data=postData,headers=headers)
print request.content
#最后我们调用
login(user,passwd)
#此时已经登录成功,可以在返回的数据中看到自己的名字等,可以进行后续的操作

浙公网安备 33010602011771号