Python中如何实现MOOC扫码登录
作者:_ccd_yuan_ 时间:2021-10-08 14:24:50
1、基本原理
访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY
浏览器开启定时轮询服务器,确认KEY对应的扫码结果
用户使用app扫码二维码,app获取KEY并告知服务器已扫码
App确认登陆(包含个性化校验过程),服务器更新KEY的校验结果
浏览器轮询结果成功,获得一次性token
带上token请求资源,获得有效cookie,正常访问资源。
2、代码实现
我们以MOOC为例
1、访问网站扫码登录页,并下载二维码
session = requests.session()
url = 'https://www.icourse163.org/logonByQRCode/code.do?width=182&height=182' # 扫码登录url
header = {
'referer': 'https://www.icourse163.org/',
'user-agent': ua
}
resp = session.get(url,headers = header).json()# 拿到相应的json数据
codeUrl = resp['result']['codeUrl']# 提取二维码url及唯一标志key
pollKey = resp['result']['pollKey']
codejpg = session.get(codeUrl)# 请求二维码
with open('text.jpg','wb') as f:# 下载二维码
f.write(codejpg.content)
2、模拟轮询
利用已得的唯一标志key对服务器发起定时轮询,获得相应数据
通过分析,codeStatus的值为0是表示,等待扫码;codeStatus的值为1是表示,已扫码,等待确认登录;codeStatus的值为2是表示,扫码成功,此时服务器会返回token,这个对我们很有用
checkUrl = f'https://www.icourse163.org/logonByQRCode/poll.do?pollKey={pollKey}'
os.system('start text.jpg')
token = None
for i in range(20):# 模拟轮询
checkResp = session.get(checkUrl,headers = header).json()
if checkResp['result']['codeStatus'] == 2:
token = checkResp['result']['token']# 提取token
else:
time.sleep(1)# 每秒一次
3、弹出二维码,扫码登录
os.system('start text.jpg')
4、带上token请求资源
获得有效cookie,正常访问资源。
vaildateUrl = f'https://www.icourse163.org/passport/logingate/mocMobChangeCookie.htm?token={token}&returnUrl=aHR0cHM6Ly93d3cuaWNvdXJzZTE2My5vcmcvaW5kZXguaHRt'# returnUrl指MOOC网
session.get(vaildateUrl,headers = header)
来源:https://blog.csdn.net/m0_66230497/article/details/122911269
标签:Python,MOOC,扫码,登录
0
投稿
猜你喜欢
小诀窍让你快速上手Dreamweaver
2007-12-03 11:35:00
js+html5实现canvas绘制镂空字体文本的方法
2024-04-10 16:14:58
python利用logging模块实现根据日志级别打印不同颜色日志的代码案例
2022-03-21 14:58:07
Python matplotlib绘图设置图例案例
2021-08-17 07:05:04
ASP.NET 2.0防止同一用户同时登录
2007-10-03 14:30:00
go和python变量赋值遇到的一个问题
2023-11-15 01:54:40
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2021-06-02 21:23:14
python可视化爬虫界面之天气查询
2022-09-24 07:34:54
python中如何使用函数改变list
2022-06-04 13:38:38
Windows系统下安装GIt及GIT基本认识和配置
2023-06-14 20:54:53
用asp实现的获取文件夹中文件的个数的代码
2011-03-08 11:02:00
使用python读取txt文件的内容,并删除重复的行数方法
2022-05-08 19:41:56
Pycharm 2020年最新激活码(亲测有效)
2023-07-24 00:42:14
python判断给定的字符串是否是有效日期的方法
2023-04-07 20:07:07
如何通过PHP实现Des加密算法代码实例
2023-10-08 09:41:55
MSSql简单查询出数据表中所有重复数据的方法
2024-01-14 20:06:56
SpringSecurity页面授权与登录验证实现(内存取值与数据库取值)
2024-01-22 20:17:54
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2023-12-28 03:21:52
通过Python收集汇聚MySQL 表信息的实例详解
2024-01-18 17:25:20
Django数据统计功能count()的使用
2022-12-21 23:49:29