获取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生成的位置

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

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("账号", "密码")

转载于:https://www.cnblogs.com/Teachertao/p/11160955.html

Requests方法 -- Token获取操作相关推荐

  1. jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等...

    简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...

  2. 爬虫笔记——东方财富科创板数据爬取(requests方法)

    爬虫笔记--东方财富科创板数据爬取(requests方法) 网页观察 网页源代码分析 具体代码 上篇文章:爬虫笔记--东方财富科创板数据爬取(selenium方法)介绍了selenium爬取东方财富科 ...

  3. Django CSRF(什么是CSRF?)\Django前后端分离csrf token获取方式

    文章目录 Django CSRF 什么是CSRF? Django CSRF Django CSRF 中间件 Django,Ajax提交csrf_token处理 Django 设置 cookie 中的 ...

  4. java list 截取部分数据_Java List.subList()方法:获取列表中指定范围的子列表

    集合类中的 List.subList() 方法用于获取列表中指定范围的子列表,该列表支持原列表所支持的所有可选操作.返回列表中指定范围的子列表. 语法: subList(int fromIndex,i ...

  5. 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件

    博客地址 : http://blog.csdn.net/shulianghan/article/details/41520569 代码下载 : -- GitHub : https://github.c ...

  6. Spring Cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)

    上一篇我根据框架中OAuth2.0的使用总结,画了SSO单点登录之OAuth2.0 登出流程,今天我们看一下根据用户token获取yoghurt信息的流程: /** * 根据token获取用户信息 * ...

  7. MySQL提供了以下三种方法用于获取数据库对象的元数据

    MySQL提供了以下三种方法用于获取数据库对象的元数据: 1)show语句 2)从INFORMATION_SCHEMA数据库里查询相关表 3)命令行程序,如mysqlshow, mysqldump 用 ...

  8. Android 在onCreate()方法中获取控件宽高值为0解决方案

    大家很多时候需要在Activity或者Fragment的onCreate()方法中获取声明的空间的高度或者宽度,进行位置移动或者其他操作,但是当调用 view.getHeight() 或者 view. ...

  9. java获取微信token_Java微信公众平台开发(六)--微信开发中的token获取

    转自:http://www.cuiyongzhi.com/post/44.html (一)token的介绍 引用:access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access ...

最新文章

  1. 求正整数N(N1)的质因数的个数,相同的质因数需要重复计算(java)
  2. windows下socket开发tcp程序 简单例子
  3. ASP.NET自定义错误页面
  4. hbase 使用lzo_带你快速上手HBase | HBase列族优化
  5. 【初学者必读】—PowerShell 基础详解及设置
  6. 设计模式系列之九:职责链模式
  7. Apache部署django项目
  8. 地铁上读完《UNIX环境高级编程》是一种怎样的体验
  9. excel宏教程_Excel多功能工具箱(收藏家必备)
  10. pdf 编辑器 linux
  11. Linux之创建DBeaver桌面图标
  12. 【定制Android系统】Android O 修改吉字节为GB
  13. The database could not be exclusively locked to perform the operation(SQL Server 5030错误解决办法)(转)...
  14. 服务器宕机指的是什么意思?
  15. 【WIN7深度揭秘】将你的笔记本打造成WI-FI基站实现无线共享上网
  16. Anaconda 安装使用
  17. Android中创建一个商品展示小案例
  18. python笔记-02(列表和元组)
  19. 常见的状态码出现原因200、301、302、403、404、500、503
  20. 吕鑫MFC学习系列一

热门文章

  1. POJ 3617 Best Cow Line 贪心算法
  2. python 美团api接口对接_震惊!SpaceX火箭数据开放API接口,可用Python进行数据分析...
  3. CPU并行与GPU并行联系及区别
  4. IDA 7.5 Demo 包含 Windows、Linux、macOS
  5. Pixhawk代码分析-姿态解算篇A
  6. 2021华宁三五班高考成绩查询,2021娄底市地区高考成绩排名查询
  7. 浅拷贝与深拷贝的区别
  8. linux服务器nvidia驱动的安装与卸载
  9. Ubuntu 上更新 Flash 插件
  10. 质数判断,不同算法效率比较