对某班题库api的技术分析

因为某种原因需要在易班上进行练习校规校纪,非常好的平台,非常非常好。嗯~
作为社会主义接班人,当代优秀大学生,这么好的题不存下来慢慢学习,对不起自己,对不去社会啊!!!

然后默默的按下了f12,开发者模式
然后界面如下

然后seach 一下ajax,发现4个api
1./t/student/updateTraining
2./t/student/collectshiti
3./t/student/showMobileLSjAjax
4./t/student/errorfeedback
按照这个网页的设计的思路来讲,肯定有个报错反馈的api,肯定有个更新试题的api,有个加载页面基础布局的api
然后盲猜一波,
第一个api是请求试题,因为update 更新 traning 训练。嗯~就差不多了
第四个,带着error,那就是错误反馈
第二个 收集 shiti????(疯狂吐槽命名)。根据api所在上下文应该是收藏试题用的,就是收藏然后再次登录的时候错题本之类的就会有,嗯~,就先这样
第三个不知道干啥了emmm
盲猜完毕,开始检验,使用抓包工具,开始抓包
事实证明,盲从错误,啪啪打脸
/t/student/showMobileLSj是加载页面的

哪我们的目标是数据数据在哪?,当我重新刷新的时候,抓到两个包,第一个就是上面那个
第二个如下
wow~数据在这/t/student/showMobileLSjAjax
哪我们重新理一下思路。
当我们点击题库连接时,发生了什么???
第一步初始化,初始化的时候先访问/t/student/showMobileLSj,加载基本布局,
随后访问/t/student/showMobileLSjAjax,加载数据,这样初始化完成
然后静默,等待用户操作,
如果出错访问/t/student/errorfeedback,
如果收藏访问/t/student/collectshiti,
如果刷新,访问/t/student/showMobileLSjAjax。
至于这个/t/student/updateTraining懒得管了。
数据分析
数据传回来是个json字符串,从外往里面来吧

最外面是statu msg 和date 嗯就是返回的格式,statu为状态码,msg为提示信息 date 为数据体,顺便说一句,这种形式很常见,后端就是一个dtoresponse这样的类,这样写的好处多多
然后看data

然后就是英文理解了,继续盲猜
collageid 学校的id
examtype 后面跟的一个应该是枚举的值,现在是1应该就是刷题模式
剩下的有时间慢慢猜
然后是data的对象一个是getshijuaninfor(吐槽命名)
没大用对于我们的目的
然后就是shitilist,emmm

本人非常好奇第一个的加密字符串,但是无奈不会解密啊
然后里面有的就是题和答案,答案在old_answer里面,俺不知道为啥叫 old answer

我们的目标数据完成了,也就不看了
下面分析api

api的分析
就是分析这个/t/student/showMobileLSjAjax
首先是参数,分析也不算分析,就是抄嘛!抄啥?当然是抓的包啦


四个参数,不巧上面的数据里面都有,就这个page ,然后多看几道题,发现就是随着题目的位置变化的,由上文可知,一共171道题,那么page的范围就是1-171的整数。
然后进行测试,使用postman,
测试注意的地方
我们是模拟发送请求,那么服务器一定要校验我们的请求是不是合法,对于这种请求,是一定要登录之后才能进行操作的,所以把网页的cookie 复制到herder里面。其余参数用formdate
测试成功。
个人感觉还有别的方法可以申请到试题
程序控制访问171次
这里采用c#演示

static void Main(string[] args){Console.WriteLine("*****正在开始*****");for (int i = 1; i < 171; i++){Console.WriteLine("正在开始第{0}个数据",i+1);Console.WriteLine("");Console.WriteLine("onloading!!!");var date = GetShiti(i + 1);WriteShiti(date);//我们是正经技术分析,不是攻击,所以速度放慢Thread.Sleep(800);Console.WriteLine("************************");}}public static Rootobject GetShiti(int num){Dictionary<string, string> dic = new Dictionary<string, string>();dic.Add("courseid", "13036");dic.Add("coursename", "校规校纪题库");dic.Add("id", "13036");dic.Add("page", num.ToString());//请求头处理HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.yiban.cn/t/student/showMobileLSjAjax");request.Method = "POST";request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";request.Headers.Add("Cookie", "");#region 添加Post 参数StringBuilder builder = new StringBuilder();int i = 0;foreach (var item in dic){if (i > 0)builder.Append("&");builder.AppendFormat("{0}={1}", item.Key, item.Value);i++;}byte[] data = Encoding.UTF8.GetBytes(builder.ToString());request.ContentLength = data.Length;using (Stream reqStream = request.GetRequestStream()){reqStream.Write(data, 0, data.Length);reqStream.Close();}#endregionvar resp = request.GetResponse();//获取响应内容string result = string.Empty;using (StreamReader reader = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)){result = reader.ReadToEnd();};Console.WriteLine(result);string json = result;result += "\r\n";result += "---分隔符---";WriteFile("jsondate.txt", result);return JsonConvert.DeserializeObject<Rootobject>(json);}public static void WriteShiti(Rootobject item){string shiti = string.Empty;for (int i = 0; i < item.data.shitilist.Length; i++){shiti += Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(item.data.shitilist[i].title));shiti += "\r\n";for (int j = 0; j < item.data.shitilist[i].options.Length; j++){shiti+= Encoding.Unicode.GetString(Encoding.Unicode.GetBytes(item.data.shitilist[i].options[j]));shiti += "\r\n";}string[] oldanwer = item.data.shitilist[i].old_answer.Split(',');for (int k = 0; k < oldanwer.Length; k++){switch (oldanwer[k]){case "1":shiti += "A";break;case "2":shiti += "B";break;case "3":shiti += "C";break;case "4":shiti += "D";break;case "5":shiti += "E";break;}}shiti += "\r\n";shiti += "*****************************************************";shiti += "\r\n";WriteFile("shiti.txt", shiti);}}public static void WriteFile(string path,string content){Console.WriteLine("开始写入文件");FileStream fs = null;string filePath = path;//将待写的入数据从字符串转换为字节数组  Encoding encoder = Encoding.UTF8;byte[] bytes = encoder.GetBytes(content);try{fs = File.OpenWrite(filePath);//设定书写的開始位置为文件的末尾  fs.Position = fs.Length;//将待写入内容追加到文件末尾  fs.Write(bytes, 0, bytes.Length);Console.WriteLine("写入文件完成");}catch (Exception ex){Console.WriteLine("文件打开失败{0}", ex.ToString());}finally{fs.Close();}}

这样就把所有的题目给扒了下来。
我们算一下时间成本,单纯的扒题
两种方式,第一种就是复制黏贴,熟读快的话20s一个题,171个题,差不多也就是50min
第二种方式就是这样敲代码,我写了差不多两个小时吧emmm是有点慢。
我们只是为了把题存下来以后继续好好学习,看样子还是第一种比好好,所以大家还是复制黏贴扒题吧!

本文只是技术交流,如若用于不合规方面,后果自负

某班题库技术分析(1)相关推荐

  1. Java4班题库-传智专修学院Java面试题库二

    Java4班题库 =-=-=-=-=-此 处 分割线=-=-=-=-=- biubiubiu~觉得不错可以继续阅读其他博客哟 此播客如有侵权请联系我改正哦,日常在线,如不在线未及时回复请包涵等待 =- ...

  2. Java4班题库-传智专修学院Java面试题库三

    Java4班题库 =-=-=-=-=-此 处 分割线=-=-=-=-=- biubiubiu~觉得不错可以继续阅读其他博客哟 此播客如有侵权请联系我改正哦,日常在线,如不在线未及时回复请包涵等待 =- ...

  3. Java4班题库-传智专修学院Java面试题库四

    Java4班题库 =-=-=-=-=-此 处 分割线=-=-=-=-=- biubiubiu~觉得不错可以继续阅读其他博客哟 此播客如有侵权请联系我改正哦,日常在线,如不在线未及时回复请包涵等待 =- ...

  4. Java4班题库-传智专修学院Java面试题库一

    <----------------------------------一道华丽优雅大方魅力可爱善良动人美丽的分割线-------------------------------------> ...

  5. java期末判断题题库_(java期末考试选择题题库.doc

    (java期末考试选择题题库 1.分析以下程序: 1)public class x{ 2)public static void main(String[]args){ 3)String ol=new ...

  6. 计算机自适应的应用领域,计算机自适应题库的建立

    摘    要:结合经典测量理论(CTT)和项目反应理论(IRT)的优点,建立了计算机自适应题库.本题库能为应试者建立更适合自己能力的个性化测验,在评估应试者真实能力方面取得了良好的效果. 关键词:计算 ...

  7. 中国电信开发者星球c语言题库,中国电信笔试真题

    [实例简介] 该资源适用于电信行业校园招聘考试的学生做的参考题目 [实例截图] [核心代码] 2bc5b787-578a-4154-bb74-406bc3e17881 └── 017-中国电信笔试资料 ...

  8. 【渝粤题库】陕西师范大学100091 现代教育技术学 作业(专升本)

    的有关程序和文件. D计算机软件按照其功能和应用范围的不同,可分为系统软件和应用软件两大类. 9.计算机辅助测验系统的结构与功能是( ) A计算机辅助测验系统是计算机管理教学的重要应用领域. B利用计 ...

  9. 新疆计算机二级慨库,2020新疆维吾尔自治区计算机二级易考套餐:二级MS Office高级应用全程班(网课+题库+教材)...

    &nbsp&nbsp[导读]:2020新疆维吾尔自治区计算机二级易考套餐:二级MS Office高级应用全程班(网课+题库+教材),更多新疆等级考试易考套餐,请访问易考吧新疆等级考试栏 ...

  10. 计算机应用能力power,全国专业技术人员计算机应用能力考试专用教材——PowerPoint 2003中文演示文稿5日通题库版(双色)(附光盘) - 中国考研网...

    图书简介 由全国专业技术人员计算机应用能力考试专家委员会编著的<PowerPoint2003中文演示文稿5日通题库版>紧扣考试大纲,明确考试要点 本章考点:根据教育部最新大纲编写,使读者更 ...

最新文章

  1. 顶级Java多线程面试题及回答
  2. 面向对象第四单元总结
  3. 【pmcaff】人人黑产品经理,你中招了嘛!
  4. Linux MySQL5.5的安装
  5. 欧几里得与扩展欧几里得总结
  6. swagger 扫描java文档_使用Javadocs生成Swagger文档
  7. TokenInsight:反映区块链行业整体表现的TI指数较昨日同期上涨0.8%
  8. gvim的常用编辑快捷键
  9. hdfs读写流程_一篇文章搞清楚 HDFS 基本原理
  10. Duplicate Photos Fixer Pro for Mac用户指南:我可以比较不同时间的照片吗?
  11. 解雇IE补丁操作方法
  12. delphi与python_python和delphi哪个好
  13. java 手机号码归属地_Java获取手机号码归属地
  14. SVG_16_defs标签_use标签_style标签_红绿灯效果
  15. 搞着玩:基于Spring Boot的企业CMS系统
  16. 关于jmeter运行提示没有权限 报错
  17. unity3d 700种 材质球_活动策划:这10种气球创意玩法,让活动现场的布置更高级。...
  18. 计算机属于什么学1001计算机属于什么学,怎样学电脑(初学电脑先学什么)
  19. ionic3 使用QR Scaner 扫描
  20. Git HEAD 分支游离,切回master导致代码丢失的处理

热门文章

  1. Mac 下拷贝文件到移动硬盘
  2. OKR实施细则(转)
  3. opencv31:哈里斯角检测|Harris Corner
  4. 图像处理中的白化处理
  5. chart.js使用学习——混合图表
  6. 二叉树基于递归模板的算法题目(王道算法题)
  7. composer 安装php endroid/qrcode二维码应用,二维码里面添加logo
  8. VSCode插件---Code Runner
  9. 这些 Google 高级搜索技巧,你都知道么?
  10. 博士“申请考核制”经验