Requests方法 -- Token获取操作

摘要:
window.X_防伪造令牌='b792db29-d4d3-484e-98b4-04bbe0f628fe';window.X_防伪造代码='36611432';//passport.lagou.com/login/login.html“headers={”用户代理“;

获取token和code流程如下:
a、先登陆抓包查看post(提交表单操作)头中是否有token和code关键字
b、已知步骤a中出现了token和code,不登录前刷新登陆页面,查看response中是否有token和code关键字
c、输入账号密码后查看登陆后的请求头中token和code是否与未登陆前response中的一致(锁定后就好操作了)

1、打开登录首页https://passport.lagou.com/login/login.html,直接按F5刷新(只做刷新动作,不输入账号和密码),然后从返回的页面找到token生成的位置

Requests方法 -- Token获取操作第1张

2、输入账号和密码登录,查看post请求后中是否带有token和code,与未登陆前的一致,说明token和code在登陆页面传入到请求头中。

Requests方法 -- Token获取操作第2张

3、代码参考如下:

import requests,re,urllib3,hashlib
from bs4 import BeautifulSoup
urllib3.disable_warnings()

class LoginLgw():
def __init__(self,s):
self.s = s

def getTokenCode(self):
"""
要从登录页面提取token,code, 然后在头信息里面添加
<!-- 页面样式 --> <!-- 动态token,防御伪造请求,重复提交 -->
<script>
window.X_Anti_Forge_Token = 'b792db29-d4d3-484e-98b4-04bbe0f628fe';
window.X_Anti_Forge_Code = '36611432';
</script>
"""
url = "https://passport.lagou.com/login/login.html"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"
}
# 更新session的headers
self.s.headers.update(headers)
data = self.s.get(url,verify=False)
soup = BeautifulSoup(data.content,"html.parser")
tokenCode = {}
try:
token = soup.find_all("script")[1].get_text()
print(token)
tokenCode['X_Anti_Forge_Token'] = re.findall(r"Token = '(.+?)'",token)[0]
tokenCode['X_Anti_Forge_Code'] = re.findall(r"Code = '(.+?)'",token)[0]
return tokenCode
except:
print("获取token和code失败")
tokenCode['X_Anti_Forge_Token'] = ""
tokenCode['X_Anti_Forge_Code'] = ""
return tokenCode

def encryptPwd(self, passwd):
# 对密码进行了md5双重加密
passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()
# veennike 这个值是在js文件找到的一个写死的值
passwd = 'veenike' + passwd + 'veenike'
passwd = hashlib.md5(passwd.encode('utf-8')).hexdigest()
return passwd

def login(self, user, psw):
'''
function:登录拉勾网网站
:param user: 账号
:param psw: 密码
:return: 返回json
'''
gtoken = self.getTokenCode()
print(gtoken)
print(gtoken['X_Anti_Forge_Token'])
print(gtoken['X_Anti_Forge_Code'])
url2 = "https://passport.lagou.com/login/login.json"
headers2 = {
"X-Anit-Forge-Code": gtoken['X_Anti_Forge_Code'],
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Accept": "application/json, text/javascript, */*; q=0.01",
"X-Requested-With": "XMLHttpRequest",
"X-Anit-Forge-Token": gtoken['X_Anti_Forge_Token'],
"Referer": "https://passport.lagou.com/login/login.html"
}
# 更新s的头部
self.s.headers.update(headers2)
passwd = self.encryptPwd(psw)

body = {
"isValidate":"true",
"username": user,
"password": passwd,
"request_form_verifyCode":"",
"submit":"",
"challenge":"8e2eabfd601c8ae65e536c327679d99c"
}

r2 = self.s.post(url2,headers=headers2,data=body,verify=False)
try:
print(r2.text)
return r2.json()
except:
print("登录异常信息:%s" % r2.text)
return None

if __name__ == "__main__":
s = requests.Session()
lgw = LoginLgw(s)
lgw.login("账号", "密码")

免责声明:文章转载自《Requests方法 -- Token获取操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何正确读取war包中配置文件的路径c++实现md5加密下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

oracle正则表达式函数 匹配

文章介绍了关于oracle正则函数的一些用法,包括匹配等,Oracle10g提供了在查询中使用正则表达的功能,它是通过各种支持正则表达式的函数在where子句中实现的。 ORACLE中的支持正则表达式的函数主要有下面四个: 1,REGEXP_LIKE :与LIKE的功能相似 2,REGEXP_INSTR :与INSTR的功能相似 3,REGEXP_SU...

python之全局变量的测试

来源:http://andylin02.iteye.com/blog/841604 结论:python的全局变量:int string, list, dic(map) 如果存在global就能够修改它的值。而不管这个global是否是存在于if中,也不管这个if是否能够执行到。   但是,如果没有 Python代码   if bGlobal:     ...

ag-grid动态生成表头及绑定表数据

ag-grid动态加载表数据   优势:灵活度高,代码复用性强 实现步骤: 1.  安装 ag-grid-vue 组件,         在vue项目中,运行如下命令即可安装         npm install --save ag-grid-community ag-grid-vue vue-property-decorator@^8.0.0     ...

IOS UIImage类方法总结

IOS中对图片的处理 UIImage 相信做项目时肯定会有用到 UIImage 这个类,那我们就来看一下这个类中都有什么内容。 其实这篇文章就是在看文档的时候想记录一下文档中得方法。 UIImage 继承于NSObject 下面介绍一下UIImage中的方法 首先是我们最常用的 通过图片的文件名来获取这个图片 + (UIImage *)imageNa...

elasticsearch安装ansj分词器

1、概述    elasticsearch用于搜索引擎,需要设置一些分词器来优化索引。常用的有ik_max_word: 会将文本做最细粒度的拆分、ik_smart: 会做最粗粒度的拆分、ansj等。    ik下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases    ansj下...

drf 三大认证详解

目录 drf 三大认证: 认证: 权限:认证与权限组件绑定使用: 频率:多方式登录: drf 三大认证: 认证: # 全局配置: -在全局(认证组件只能决定request.user,不是断定权限的地方,所以一般配置全局) REST_FRAMEWORK = { # 认证组件 'DEFAULT_AUTHENTI...