Itheima课程资源简单分析
1、背景介绍
2、工具准备
3、抓取并分析网络请求
4、注意事项
5、总结
6、声明
1、背景介绍
Itheima是我们在学习路上的一座绕不开的丰碑,升值我们的大学课本都是采用黑马家的,Java课程更是其最核心的内容,就解决了不少我学习上的困惑,秉持学习的态度,我抓包其课程的内容,希望可以有所收获。
1 | https://m.boxuegu.com/class/outline-1112 |
图中的courseId
即课程名,返回的响应体是JSON类型的
格式化一下返回的JSON
可以看出返回的是所有课程大纲,有几个比较重要的关键字需要提取一下moduleId
、isTry=1
、sectionId
就是请求到的比较重要的字段,有了这些字段,继续后面的请求分析
2、工具准备
项目 | 描述 |
---|---|
itheima网站 | 我们需要抓包的网站 |
Firefox | 调试所使用的浏览器 |
Thor+Anubis+在线工具 | 手机上抓包+重放+正则+去重 |
Postman | 接口批量测试 |
3、抓包调试
获取全部课程大纲moduleId
1、向服务器请求,并获取到返回的JSON数据
1 | https://m.boxuegu.com/portalApp/bxg/course/v2/1112/chapter?courseId=1112 |
2、处理返回的JSON
正则匹配出
moduleId
- 正则表达式:
moduleId": \d+
匹配出 moduleId: 105695 - 再一次正则匹配
\d+
获得纯数字的moduleId如:105695
- 正则表达式:
去重,去除返回的JSON中有重复的部分
制作成
moduleId.txt
备用
获取全部课程名
1、点击可以试看的内容进行观看,获取试看视频的数据包进行分析
2、查找到关键的链接,进行分析
关键链接1
1 | https://www.boxuegu.com/ccVideo/getCcVerificationCode?type=D&studentId=xxxx&videoId=10178456&courseId=1112&moduleId=105695&sign=xxxx |
关键字段1:studentId
,分配的学生id
关键字段2:vedioId
,视频的id
关键字段3:courseId
,课程id,对于本课程来说id值为1112
关键字段4:moduleId
,大纲的moduleId,用来请求大纲下的具体课程内容
关键字段5:sign
,用来鉴权的加密字段,为MD5加密(32位小写字母加数字组成)在cookie中可以提取
作用
响应体中包含着,用来获取到视频播放的鉴权值verificationcode
,==>后面将变成vc
拼接到具体视频播放的URL中,非常关键。
关键链接2
1 | https://m.boxuegu.com/portalApp/coursePlay/getCourseKnowledgeTree?studentId=xxxxx&moduleId=102659&courseId=1112&type=PATH&isTry=false&sign=xxxxxxx |
关键字段1:isTry
,就用鉴权是否为试看用户,如果isTry=true
就表示:试看用户,服务器返回的JSON数据就不会包含全部课程信息,只需要在请求的时候isTry=false
即可。
作用
用来获取大纲下的全部课程的课程名
如下:
格式化后的JSON
关键字段1:ccVideoId
,课程id加密之后的字段,只需要获取到全部即可
数据处理:
- 正则匹配
[A-Z0-9]{32}
- 结果存储在videoId.txt文件中
获取真实的视频播放链接
请求地址:
1 | https://p.bokecc.com/servlet/getvideofile?vid=9BE07F17C38EFAE89C33DC5901307461&siteid=78665FEFxxxxxxxx&vc=xxxxxxx |
分析:
请求拼接了vid
+siteid
+vc
,其中这些数据在前面已经获取到,按需拼接即可。
处理之后的响应体内容:
1 | {"playurl":"http://cd15-ccd1-2.play.bokecc.com/flvs/78665FEF083498AB/2020-05-11/9BE07F17C38EFAE89C33DC5901307461-20.m3u8?t=1605160103&key=1808B08473AAA7F5225DF2CB9CB8BE72&tpl=10&tpt=231","mediatype":1,"desp":"高清","backupurl":"http://cd11-ccd1-2.play.bokecc.com/flvs/78665FEF083498AB/2020-05-11/9BE07F17C38EFAE89C33DC5901307461-20.m3u8?t=1605160103&key=1808B08473AAA7F5225DF2CB9CB8BE72&tpl=10&tpt=231","quality":20} |
关键字段1:playurl
+backurl
,播放链接
关键字段2:-20.m3u8
或者-30.m3u8
,这是播放清晰度,部分视频无超清画质
关键字段3:t=1605160103
,时间戳,链接失效的时间
关键字段4:key
,m3u8的解密密钥
服务器返回了playurl
和backurl
两份播放链接,选择其一,正则表达式,将内容匹配出来即可。
- 正则表达式匹配播放的URL
1 | #高清 |
4、注意事项
1、抓取课程需要在调试界面将设备改为模拟移动设备,或者在移动设备上抓包。
2、需要开启设备需要https解密,并且信任证书。
3、获取的部分关键字段生存时间短
5、总结
1、用户鉴权最好是云端校验
2、m3u8加密并直接携带解密的key
3、对于异常的IP请求要做处理
4、接口的鉴权再完善些
6、声明
仅供学习研究使用,不得将上述内容用于商业或者非法用途,否则一切后果请自负。