NodeJs模拟登陆正方教务


Posted in NodeJs onApril 28, 2017

网上已经有很多关于模拟登陆正方教务的作品了,基于 PHP,Python,Java,.Net 加上我自己尝试的NodeJs,这几门语言都可以实现模拟登陆,模拟登陆的技术点不是特别难,这里记录一下利用 Node 碰到的一些坑,以及一些我自己的解决思路。

1. 收集模拟登陆信息

这一步最基础,通过 chrome 的 network 就可以查看跳转的 post 或者 get 请求以及参数了。

注意勾选Preserve log 否则页面跳转你是看不到请求的。

NodeJs模拟登陆正方教务

注意点:出现 (unable to decode value) 表示经过 gbk 转码了,另外就是post的数据格式是 formdata

NodeJs模拟登陆正方教务

2. 登录过程中 302 重定向

之前利用 PHP 就死在 重定向上,没有搞定,总是会出现 object moved to here.不同语言都有相关的解决办法的,你用js库,那就查看API,php是curl有这个方法的

3. NodeJs 自身

1、回调-----使用了 async 这个库来解决回调。

2、异常处理-----express 框架就好了,自定义异常中间件,省心。

3、容易崩溃----- 使用 PM2 就好。

4、由于这里的使用场景相当于是每个用户登录后,后端都要发送一次模拟登陆,如果碰到长时间目标网站没有响应,那么我采取了重试当前操作的一种做法,所以如果响应时间很长,那么是否可以先返回一个 loading 的状态,然后执行完之后再通知前端?

这里我使用了 Socket-io 来搞定后端像前端定向通知的这么一种做法。

但是 socketio也有坑,就是服务端知道client id是可以发送数据给某一个客户端的,但是前端如果一刷新页面就会生成一个新的 client id,鉴于前端使用的单页框架,在应用启动的时候就向服务端请求一个 token 然后 socket 在通信的时候带上这个 token 和client id,并且保存在了 redis 中,这样当后端的异步请求抓取到数据的时候,只要通过这个 token 查找对应的client id 即可。

5、代码问题

刚开始犯了一个错,就是拿客户端编程的思维去写 Node 结果发现 当两个用户同时发送请求后,会导致变量数据发生冲突。换句话说,如果一开始定义了一个 aa 变量  A 用户发送请求 写入了数据到 aa ,B 用户此时也是操作 了 aa 那么这个 aa其实就是出问题了,也就是说当你启动 NodeJs 之后,你所写的全局变量将会永远存在(很正常...)。

暂时解决的办法就是 私有化,在入口统一使用了 new 的方式,这样无论你并发多少个请求,相互之间的数据都不会受到影响。 不知道还有没有更好的实现方式。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

NodeJs 相关文章推荐
浅谈NodeJS中require路径问题
May 07 NodeJs
Jquery通过ajax请求NodeJS返回json数据实例
Nov 08 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
nodejs微信扫码支付功能实现
Feb 17 NodeJs
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
May 15 NodeJs
nodejs遍历文件夹下并操作HTML/CSS/JS/PNG/JPG的方法
Nov 01 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
Nodejs对postgresql基本操作的封装方法
Feb 20 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
用Nodejs搭建服务器访问html、css、JS等静态资源文件
Apr 28 #NodeJs
Nodejs读取文件时相对路径的正确写法(使用fs模块)
Apr 27 #NodeJs
详解nodejs express下使用redis管理session
Apr 24 #NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 #NodeJs
Nodejs进阶:express+session实现简易登录身份认证
Apr 24 #NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 #NodeJs
nodejs入门教程四:URL相关模块用法分析
Apr 24 #NodeJs
You might like
浅析PHP绘图技术
2013/07/03 PHP
php和editplus正则表达式去除空白行
2015/04/17 PHP
PHP数据库表操作的封装类及用法实例详解
2016/07/12 PHP
浅谈php使用curl模拟多线程发送请求
2019/03/08 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
javascript中将Object转换为String函数代码 (json str)
2012/04/29 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
微信小程序 本地数据读取实例
2017/04/27 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[40:06]DOTA2亚洲邀请赛 4.3 突围赛 Liquid vs VGJ.T 第一场
2018/04/04 DOTA
python解析xml文件操作实例
2014/10/05 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python中redis的安装和使用
2016/12/04 Python
Python 读写文件的操作代码
2018/09/20 Python
Python数据集切分实例
2018/12/08 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
使用Python OpenCV为CNN增加图像样本的实现
2019/06/10 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
python实现邮件自动发送
2019/08/10 Python
Python 识别12306图片验证码物品的实现示例
2020/01/20 Python
python如何进入交互模式
2020/07/06 Python
python如何快速生成时间戳
2020/07/21 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
2015年幼儿园安全工作总结
2015/05/12 职场文书
施工安全责任协议书
2016/03/23 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
用Python仅20行代码编写一个简单的端口扫描器
2022/04/08 Python