开发者

Python中如何实现MOOC扫码登录

目录
  • 1、基本原理
  • 2、代码实现
    • 1、访问网站扫码登录页,并下载二维码
    • 2、模拟轮询
    • 3、弹出二维码,扫码登录
    • 4、带上token请求资源
  • 总结

    1、基本原理

    • 访问网站扫码登录页,网站给浏览器返回一个二维码和一个唯一标志KEY
    • 浏览器开启定时轮询服务器,确认KEY对应的扫码结果
    • 用户使用app扫码二维码,app获取KEY并告知服务器已扫码
    • App确认登陆(包含个性化校验过程),服务器更新KEY的校验结果
    • 浏览器轮询结果成功,获得一次性token
    • 带上token请求资源,获得有效cookie,python正常访问资源。

    2、代码实现

    我们以MOOC为例

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

    Python中如何实现MOOC扫码登录

    session = requests.session()
    url = 'https://www.icourse163.org/logonByQRC编程xMwNIvYLrode/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及唯一标志androidkey
    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是表示开发者_JAVA教程,等待扫码;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=aHR0cHM6Ly93d3cuaWNvdXJzZTE2Mandroidy5vcmcvaW5kZXguaHRt'	# returnUrl指MOOC网
    session.get(vaildateUrl,headers = header)
    

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜