疫情在家上慕课,逼出了最强的我(分析如何写一个自动化刷课软件)

前言

又到了在家刷慕课的时候了,哎,渴望学习的我却耐不住性子看今天布置的任务。在刷qq的时候,无心中看到有人在群里叫卖代刷网课,4元一科,就单单这个价格,已经很诱人了,真的很低。其实也能想象,反正是软件刷,本身不费任何力气,便宜走量呗。web

不过,这并不吸引我,吸引个人是刷课软件的原理,话很少说,咱们开始分析!
在这里插入图片描述
编程

准备工具

  1. 谷歌浏览器
  2. postman 接口测试软件

重头戏

视频资源分析

咱们首先打开一节课,点击进入到课程,让视频处于播放中,咱们此时按住f12 进入谷歌浏览器的开发者模式,点击network 并选择XHR(xmlHttpRequest)浏览器

在这里插入图片描述

在视频的播放中,咱们会不断接收这样的消息:缓存

在这里插入图片描述

也许有人知道这是什么了,我也不卖关子了,这个就是视频的缓存数据。(后来补充:通过百度搜索,发现慕课使用的m3u8网络传输协议来作在线视频的播放。)cookie

先经过请求获取视频流加载信息表:网络

在这里插入图片描述

扩展连接:less

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jjfGEz0w-1585215618816)(C:\Users\86151\Desktop\刷客软件分析过程\3.png)]ide

整个缓存请求是这样的一个URL形式,std0.ts 开始,每次请求数字都加1.这里默认是标清播放,若是是高清播放,结尾是hdx.ts.svg

而后咱们等待视频走完,看看有没有新的请求发出。工具

视频刚播放完毕,立马发出了一个请求

在这里插入图片描述

完整的请求是这样:

在这里插入图片描述
从连接英文的意思来说,应该是保存慕课学习状态,也就是我们这个视频看完了,总得给我们记录一下,至于记录哪些消息呢,咱们看看发送的数据。对了,地址后面跟了一个csrfkey 这个值,这个应该就是身份标识。

  • 先看cookie

    除了一些我的信息以外,我发现了另外三条

    1. hasVolume=true;

    2. videoRate=1.5;

    3. videoVolume=0.93;

    这三个分别表示 是否有声音、视频播放速度、视频播放音量

    乖乖,我们日常喜欢静音刷网课的同窗注意了,这些行为都会被记录,至于在教师端显示不显示我就不知道了。之后刷课记得开声音(博主仍是提倡你们好好听课的,之后确定用得上)

  • Form Data

在这里插入图片描述

  1. unitid 单元id
  2. finished 是否完成本课程
  3. index 索引号 (至于什么做用,目前不知)
  4. duration 持续时间,这个值是个固定值,不少视频都是300000
  5. courseid 课程id
  6. lessionid 章节id
  7. videoid 视频id
  8. termid 团体id 我猜想是学校id
  9. userid 用户id
  10. contenType 内容类型 这里指1 指视频 不一样的数字指为不一样资源
  11. action 动做 学习时间统计
  12. videotime 视频时长 单位是s
  13. learnedVideoTimeCount 视频学习时间统计

在屡次观察后,我发现:这个保存视频学习状态的请求每五分钟请求一次,并非最终看完视频后,提交一次请求

​ 第一次请求

在这里插入图片描述

​ 第二次请求

在这里插入图片描述

​ 视频观看完毕后请求

在这里插入图片描述

本次课程视频时长为12分26秒,换算成秒应该是746s 但视频是从0开始计算时间的 因此视频长度应该加1 为 747s。

此时有个疑问,这三次请求的学习时长加起来为754s ,比原视频要多6s,这是怎么回事呢。我观看了另一个视频,发现学习时长加起来要比原视频多5s。我猜想这里,只要学习时长大于视频时长便可,具体多几秒 应该没事,只要别多太多,我们就默认5s左右。

至于videotime 第一次为296 第二次为592 第三次为747 ,能够这样解释,由于用户须要在观看时,每5分钟进行状态提交,只要此时视频时间点小于学习时长便可,我们也默认5s。

插一句:每节课程前面都有一个⭕,当你完成该节课程的所有内容后,这个圆圈会变成实心的,若是你仅仅完成一部分,好比只是看完了视频,这个圆圈会变成半实心。

文档资源分析

我们接下来看看这个课程的其余资源:

在这里插入图片描述

咱们点开中间的文档

在这里插入图片描述

每次咱们点击下一页时,咱们会发现,发送了一个请求,请求地址与视频请求地址同样,可是参数有了很大的变化,咱们一块儿来看看

  • cookie

    1. hasVolume=true;
    2. videoRate=1;
    3. videoVolume=0.

    这里咱们能够看到,视频声音为0.这个咱们很容易理解,文档是没有声音的。虽然不知道后台有没有对这个地方作断定,不过也是给咱们提个醒,若是要作工具的话,要注意这个点。(后续补充:在后面的观察中,我发现这些值与前面视频播放状态保持一致,这里的猜想纯属多余)

  • Form data

在这里插入图片描述

  1. unitid 单元id
  2. pagenum 当前查看页数
  3. finished 是否完成
  4. contentType 类型

咱们快速点击文档翻页,当咱们点到最后一页的时候,finished=true pagenum=22.这个部分并无作时间限制,咱们只须要获取文档页数,便可发送完成请求,相对比较简单。

讨论部分分析

讨论部分

在这里插入图片描述

讨论部分就比较简单了,请求地址与前面同样,请求参数除了类型那一块不一致外,其他都同样。

在这里插入图片描述

测试题分析

有的课会有测试题

在这里插入图片描述
咱们先去正常答题,看看提交后的请求信息:

在这里插入图片描述

点击提交后,会先发送一个请求检验你的答案,这个咱们不去考虑,紧接着,仍是会发送一个saveMocContentLearn的请求,地址与前面的同样,参数与讨论部分基本一致,只有contentType处这里值为5.

总结

  1. 各种学习资源的状态提交请求地址一致,参数方面contenTpye=1 表示视频资源 、contenTpye=3 表示文档资源 、contenTpye=6 表示讨论资源 、contenTpye=5 表示测试资源

  2. 咱们能够根据上面分析使用postman工具进行测试,我这里测试没什么问题

  3. 目前只是作了比较初级的分析,离后面实现自动刷课还有很长的路要走。

  4. 这些仅仅做为编程爱好者之间的分享,博主建议你们日常仍是要老老实实上课听课,知识会给你带来巨大改变的。

欢迎你们跟我一块儿交流,有兴趣的能够博客底下留言。