雨课堂websocket登录获取登录数据
标签搜索

雨课堂websocket登录获取登录数据

日落晚阳.
2025-12-03 / 0 评论 / 2 阅读 / 正在检测是否收录...

miq4e6uz.png

前言

本内容仅用于技术交流学习,严禁商用;爬取行为需遵守网站协议及法律规定,如有侵权请联系删除。

雨课堂网页版的登录流程

  1. https://www.yuketang.cn/web?next=/v2/web/index&type=3页面加载完毕后,客户端与服务端建立websocket链接。
  2. 随即客户端发送一段数据,用于请求微信二维码。
  3. 服务端拿到数据后反馈二维码相关信息。
  4. 并每隔一段时间重新发送一次二维码信息。
  5. 客户端根据信息去请求二维码图片。
  6. 用户扫码,由移动客户端发送信息至服务端确认用户正在登录。
  7. 服务端再通过websocket发送登录的相关信息回客户端。
  8. 客户端拿到登录的相关信息后post到login接口进行登录,至此登录成功。

miq54qhd.png

具体步骤

一、找到websocket接口

雨课堂的websocket接口为wss://www.yuketang.cn/wsapp/

miq550q2.png

二、查看websocket数据交流情况

数据内容长度时间
{"op":"requestlogin","role":"web","version":1.4,"type":"qrcode","from":"web"}7723:06:57.966
{"op":"requestlogin","loginid":"7e3115fc-ce02-439f-9e95-f7cc797f6b13","expire_seconds":60,"ticket":"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQG_8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAyUGRSMEZUN2pkczExNENHU2hGY3EAAgSmLy1pAwSAOgkA","qrcode":"http://weixin.qq.com/q/02PdR0FT7jds114CGShFcq"}30623:06:57.996

登录之后发现多了一串数据

{
  "subscribe_status": true,
  "AppOpenID": "",
  "profile_edit_status": false,
  "UserID": "",
  "DateJoined": "2025-03-22T00:12:43",
  "Role": 0,
  "LastLogin": "2025-12-03T23:22:35",
  "Department": "",
  "WeixinUnionID": "",
  "LastLoginIP": "",
  "noRecArticle": true,
  "Auth": "",
  "ppt_config_data": {},
  "Nickname": "",
  "School": "",
  "Name": "",
  "Language": "zh-cn",
  "Gender": 0,
  "YearOfBirth": null,
  "is_self_set": false,
  "Avatar": "",
  "Position": null,
  "subscribe_message_templates": [],
  "MinaOpenID": "",
  "isBind": true,
  "user_on_lessons": [],
  "AndroidOpenID": "",
  "op": "loginsuccess",
  "loginid": "***"
}

关键信息是里面的UserID和Auth

三、登录

将之前获得的UserID和Auth POST到https://www.yuketang.cn/pc/web_login获取sessionid与csrftoken。然后就登录成功了

下面是代码

import requests
import websocket
import json
import cv2 as cv
import numpy as np

session = requests.Session()
user_info = {}

def on_message(ws, msg):
    global user_info
    user_info = json.loads(msg)
    if 'subscribe_status' in user_info:
        ws.close()
        return
    # 显示二维码
    resp = session.get(user_info['ticket'])
    img = cv.imdecode(np.array(bytearray(resp.content), np.uint8), cv.IMREAD_UNCHANGED)
    cv.imshow('登录码', img)
    cv.waitKey(0)
    cv.destroyAllWindows()

# 建立WS连接
ws = websocket.WebSocketApp("wss://www.yuketang.cn/wsapp/", on_message=on_message, on_error=lambda ws, e: print(e))
ws.on_open = lambda ws: ws.send(json.dumps({"op":"requestlogin","role":"web","version":1.4,"type":"qrcode","from":"web"}))
ws.run_forever()

req = session.post("https://www.yuketang.cn/pc/web_login",data=json.dumps({'UserID':user_info['UserID'],'Auth':user_info['Auth']}))
print(req.json())
# 获取课程列表
req = session.get("https://www.yuketang.cn/v2/api/web/courses/list?identity=2")
print(json.loads(req.content))

长江雨课堂,荷花雨课堂等一样只需要改个前缀即可

0

评论 (0)

取消