Python中如何实现MOOC扫码登录
作者:_ccd_yuan_ 发布时间:2021-10-08 14:24:50
标签:Python,MOOC,扫码,登录
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
0
投稿
猜你喜欢
- 环境系统:win10cpu:i7-6700HQgpu:gtx965mpython : 3.6pytorch :0.3数据下载来源自Sasan
- 正则表达式可以被看成是一个强大的通配符(通用匹配符号)。大多数人都应该很熟悉通配符,例如,当我们看到一个诸如“SAMS”的表达式
- 今天为大家介绍使用 mitmproxy 这个抓包工具如何监控手机上网,并且通过抓包,把我们想要的数据下载下来。启动 mitmproxy首先我
- 最近开始使用Go/GoLand 在import 自定义包时出现各种状况,措手不及,大概在网上找了解决方法,几乎没说的清楚的(可能是我个人理解
- 本文主要给大家介绍的是关于利用python模拟实现POST请求提交图片的方法,分享出来供大家参考学习,下面来一看看详细的介绍:使用reque
- set()函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。set 语法:class set([it
- 前言CSRF全称Cross-site request forgery(跨站请求伪造),是一种网络的攻击方式,也被称为“One Click A
- Git 恢复到之前版本1. 应用场景进行了错误提交,需要将代码回退至某个版本;或者需要检出某个版本的代码,再切换回最新版本。2. 解决方法2
- 一、前言前几天需要划分数据集,就写了一个小demo去完成这个任务。随机划分图片数据集任务描述:我的所有图片保存在同一个文件夹里,需要随机将图
- 节点类型主要有三种:元素节点,属性节点和文本节点。而对DOM的主要也就是围绕元素节点和属性节点的增删改查。下面就分别从对元素节点的操作和对属
- 关于浅拷贝和深拷贝想必大家在学习中遇到很多次,这也是面试中常常被问到的问题,借由这个时间,整理一下浅拷贝和深拷贝的关系先从一个简单的例子入手
- Python简介及入门python为什么是python选择自己喜欢的语言,这往往不容易,更多的是根据需求话说,之前是java,大学用了三年+
- mysql-connector-java与mysql版本的对应我们知道版本更新经常带来的问题就是兼容性问题。在编程过程中版本的错误选择很可能
- 高阶函数简介高阶函数 的英文名叫 Higher-Order Function ,是 函数式编程 中的一种。他的表现形式往往是通过把函数作为参
- 用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplac
- 1、引言小 * 丝:鱼哥,你说百度翻译的准确,还是google翻译的准确?小鱼:自己翻译的最准确。小 * 丝:你这… 抬杠。小
- function is_email($str){ //检验email return preg_match("/
- 下面的例子将结合项目实际运用来使用Jquery.TreeView,当然在使用控件树需要现在相应的js文件 下面就把我生成的TreeView展
- 最近学习测试mybatis,单个增删改查都没问题,最后使用mvn test的时候发现了几个问题:1.update失败,原因是数据
- 今天大概弄懂了partition by和group by的区别联系。1. group by是分组函数,partition by是分析函数(然