node.js登录强智教务系统

目录

node.js登录强智教务系统

一、抓包、分析登录请求

二、开始动手!


一、抓包、分析登录请求

首先从首页正常登录教务系统,成功登入教务系统后,F12打开检查,然后点击“Network"/"网络",可以看到一下界面

在这里可以看到一共有四个请求,不出意外的话,应该是按前后顺序发起请求的,不放心的话可以点击第一个请求,然后点击“Initiator”查看请求链

确定请求顺序之后,开始分析第一个请求的headers

在这里可以得到请求的url、请求方法和响应类型

然后再观察Response Headers和Form Data

通过这两个框起来的数据和302状态码可以知道请求和响应的过程

我们需要向“https://isea.sztu.edu.cn/Logon.do?method=logon”发送一个验证码encoded,然后返回一个重定向的链接Location.

那么问题来了,怎么得到验证码?因为form data中没有账号密码的信息,因此可以推断该验证码是把账号和密码加密后的结果,这时候我们就要从源代码中找加密函数了

刚开始找到下面这个比较可疑的文件,但是大致看了一下没有出现account/password等名称就放弃了(其实是太复杂了qaq)

后来想想不太对劲,我是在登陆后的源文件找加密函数,但是这个验证码应该是在登录前就应该处理完成的

于是又返回首页的源文件查找,只有应该index的文件可能有加密方法

然后还真发现了,在onSubmit()事件里面,并且发现了一个可疑url,我猜request hearders里面的cookie值会从这个url获取,这个后面写代码时在细说。

既然我们拿到来加密方法,那么我们直接拿来用就行,不过有些地方需要改一下,如请求和获取账号密码那一段。

首先访问一下 https://isea.sztu.edu.cn/Logon.do?method=logon&flag=sess,看一下请求头和返回值之类的。

确实返回了一个cookie(注意:这个在浏览器的调试工具看不到,要借助其它工具)

我们要先保存一下这个cookie,用于登录请求

~~~~~~~~~~~~~~~~~~~~~~~

改写代码如下:

var Cookie=""
var encoded=""
//封装请求头
var postOption1 = {url: "https://isea.sztu.edu.cn/Logon.do?method=logon&flag=sess",method: "POST",json: true,headers: {"content-type": "application/json",},body: JSON.stringify({})
}
try {await request(postOption1, (err, response, body) => {Cookie = response.headers['set-cookie'][0].substr(0, 44)    //保存cookie}).then(dataStr => {//将请求返回的字符串和账号密码进行加密if (dataStr == "no") {return false;} else {var scode = dataStr.split("#")[0]var sxh = dataStr.split("#")[1]var code = account + "%%%" + passwordfor (var i = 0; i < code.length; i++) {if (i < 20) {encoded = encoded + code.substring(i, i + 1) + scode.substring(0, parseInt(sxh.substring(i, i + 1)))scode = scode.substring(parseInt(sxh.substring(i, i + 1)), scode.length)} else {encoded = encoded + code.substring(i, code.length)i = code.length}}}})
} catch {}

成功拿到encoded

那么继续分析请求

点击第二个请求,和第一个请求差不多,不过是get方法,没什么特别注意的,继续下一个

这里可以发现又返回了一个cookie,而下一步请求就就是登陆后的页面了,所以可以断定这个cookie是登录成功的标志

最后就是能否登录成功的关键了,最后一个请求的headers中的cookie有两个参数,应该就是开始保存的cookie和上一步返回的cookie拼接起来了。

基本的分析已经完成了,那么可以开始动手写代码了


二、开始动手!

加密这一部在上面已经说过了,这里就不重复了

直接开始登录请求

//封装请求头
var getOption = {url: '',method: "GET",json: true,headers: {'Content-Type': 'application/x-www-form-urlencoded','Cookie': Cookie}
}
var postOption2 = {url: 'https://isea.sztu.edu.cn/Logon.do?method=logon',method: "POST",json: true,headers: {'Content-Type': 'application/x-www-form-urlencoded','Cookie': Cookie,'Host': 'isea.sztu.edu.cn'},form: {'view': '1','useDogCode': '','encoded': encoded}
}
try {//请求https://isea.sztu.edu.cn/Logon.do?method=logonawait request(postOption2, async (err, response, body) => {//用于302会自动重定向,因此需要在这里截取数据if (response.statusCode === 302) {getOption.url = response.headers.locationtry {//请求返回的location中url地址await request(getOption, async (err, response, body) => {Cookie += response.headers['set-cookie'][0].substr(0, 44) //拼接cookiegetOption.headers.Cookie = Cookietry {//请求返回的location中url地址,由于地址一样,不再重新赋值//最后一个请求如果成功登录,那么body的值就是登录成功的首页htmlawait request(getOption, (err, response, body) => {let nameIdx = body.indexOf('姓')let noIdx = body.indexOf('号')userInfo.name = body.substring(nameIdx + 3, nameIdx + 7)userInfo.no = body.substring(noIdx + 2, noIdx + 14)userInfo.name = userInfo.name.replace(/[^\u4e00-\u9fa5|,]+/, '')})} catch { }})} catch { }}})return userInfo
} catch {return userInfo
}

代码用的嵌套比较多,有回调地狱的感觉,有机会再调整。


登录成功的结果

点个赞吧哈哈哈哈哈哈哈哈哈哈!!~~~~~~~~~~

Node.js模拟登录强智科技教务系统相关推荐

  1. python登录教务系统_强智科技教务系统python爬虫模拟登录分析(湖南)

    强智科技教务系统python爬虫模拟登录分析(湖南) 本文章仅用作于学习 前提:最近期末到来,想第一时间看到新出成绩的,于是就有了爬取学校教务系统自己的成绩并通过Qmsg酱推送到自己QQ上的想法,目前 ...

  2. python爬虫获取强智科技教务系统学科成绩(模拟登录+成绩获取)

    python爬取强智科技教务系统,以江苏科技大学为例:本人开发的系统作为参考:https://www.wjn1996.cn/estudy/tools/educationLogin.jsp?school ...

  3. 强智科技教务系统验证码识别

    强智科技验证码识别 前言 由于近期在写一个教务系统的爬虫程序,但是网站的验证码让人很头疼,所以笔者临时找了一些资料学习了一下,本人python用的很少,而且在机器学习这块也是新手,从来没有接触过,所以 ...

  4. 强智科技教务系统学科成绩c语言,湖南强智科技教务系统python模拟登录并爬取成绩(财院)...

    其实之前有写过一篇帖子了 在之前使用教务系统的过程中,偶然一次发现登上教务系统后再退出来的后的登录网址竟然不需要验证码,想着之前有写过教务系统的爬虫模拟登录,没验证码的岂不是更好干(之前那次折腾了好久 ...

  5. python实现强智科技教务系统抢课(两种方法)

    前言 又到了选课的时间,又一次被教务系统的预选给安排了,硬是一门都没选中.于是想实现有没有自动捡课的方法.就整体分为两种方法,一种是获取get请求然后由python多线程提交去选课,一种是利用自动化测 ...

  6. 模拟登陆广西科技大学正方教务系统

    一.首先对登录过程进行抓包,看看需要什么数据   登录地址:教学管理信息服务平台 我们可以看到登录采用POST对http://jwxt.gxust.edu.cn:9600/xtgl/login_slo ...

  7. Node.js模拟发起http请求从异步转同步的5种方法

    使用Node.js模拟发起http请求很常用的,但是由于Node模块(原生和第三方库)提供里面的方法都是异步,对于很多场景下应用很麻烦,不如同步来的方便.下面总结了几个常见的库API从异步转同步的几种 ...

  8. 计算机算法基础_强智科技继续冠名第十六届“强智杯”湖南省大学生计算机程序设计竞赛...

    2020年10月17-18日,第十六届"强智杯"湖南省大学生计算机程序设计竞赛在长沙理工大学成功举办,本次竞赛由省教育厅主办.省高教学会计算机教育专业委员会协办.长沙理工大学承办, ...

  9. Node.js 实现登录校验 + 选项卡(改进版)

    Node.js 实现登录校验 + 简易选项卡(改进版) 运行结果 app.js index.html 第一题 test1.html router/test1.js 第二题 test2.html rou ...

  10. node.js模拟qq漂流瓶

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) node.js模拟简易漂流瓶,页面有扔瓶子和捡瓶子的功能,一个瓶子只能被捡到一次,阅读完就置状态位, ...

最新文章

  1. oracle 触发器 upsert,数据库管理员
  2. 枚举--遍历搜索空间的例子:熄灯问题
  3. 传统网站移动化的难点
  4. 让你更好使用Vista的设置技巧
  5. JavaScript判断页面当前浏览设备为移动端还是PC端,实现自动加载对应端页面
  6. c语言 编程 牛顿迭代,C语言编写牛顿迭代法的跟踪
  7. Leetcode题目:House Robber
  8. 步骤五 · 4-9 解决getElementsByClassName()兼容性 未解决
  9. link和@import区别
  10. php探针教程,php探针程序的推荐
  11. CFPS数据处理:少儿代答库与成人库匹配
  12. html如何制作斜线表头表格,2种方法教你怎样在WPS excel中绘制表格斜线表头
  13. 如何取消Word文档的只读模式或者限制编辑
  14. 浅谈大小端(Endian)与位域
  15. SQL每日一题 牛客17 10月的新客户单价和获客成本
  16. HTML5地理位置定位API接口开发
  17. 支持向量机 一 :线性支持向量机介绍
  18. [BUUCTF]PWN17——[HarekazeCTF2019]baby_rop
  19. No provider available from registry 127.0.0.1:2181 for service com.ddbuy.ser 解决方法
  20. Apache内容生成器 (1)

热门文章

  1. 毛玻璃效果 php,CSS3打造磨砂玻璃背景效果
  2. 深度学习day05-利用TensorFlow搭建图像分类感知机模型,并使用模型进行图片分类
  3. 计算机网络:非持久HTTP连接 VS 持久性HTTP 连接
  4. 用Python实时获取steam特惠游戏数据
  5. python写圆柱的体积_继承实现圆柱体面积体积的计算
  6. 伽卡他卡学生端找不到计算机,伽卡他卡电子教室
  7. 伽卡他卡免费电子教室软件_笔记
  8. 2021-2027全球与中国巡航型摩托车市场现状及未来发展趋势
  9. win7家庭版计算机管理没有本地用户和组,Win7找不到本地用户和组选项的解决方法...
  10. Python——实现防止微信撤回消息