Python中如何实现MOOC扫码登录

作者:_ccd_yuan_ 时间:2021-10-08 14:24:50 

1、基本原理

  • 访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY

  • 浏览器开启定时轮询服务器,确认KEY对应的扫码结果

  • 用户使用app扫码二维码,app获取KEY并告知服务器已扫码

  • App确认登陆(包含个性化校验过程),服务器更新KEY的校验结果

  • 浏览器轮询结果成功,获得一次性token

  • 带上token请求资源,获得有效cookie,正常访问资源。

2、代码实现

我们以MOOC为例

1、访问网站扫码登录页,并下载二维码

Python中如何实现MOOC扫码登录

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、模拟轮询

Python中如何实现MOOC扫码登录

利用已得的唯一标志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
  • asp之家 网络编程 m.aspxhome.com