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学习笔记之测试驱动
Apr 16 NodeJs
快速掌握Node.js之Window下配置NodeJs环境
Mar 21 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
NodeJS配置HTTPS服务实例分享
Feb 19 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
nodejs multer实现文件上传与下载
May 10 NodeJs
Nodejs进阶之服务端字符编解码和乱码处理
Sep 04 NodeJs
nodejs初始化init的示例代码
Oct 10 NodeJs
nodejs对项目下所有空文件夹创建gitkeep的方法
Aug 02 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 10 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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的ob_start() 控制您的浏览器cache
2009/08/03 PHP
php 定界符格式引起的错误
2011/05/24 PHP
基于wordpress主题制作的具体实现步骤
2013/05/10 PHP
php+highchats生成动态统计图
2014/05/21 PHP
PHP实用小技巧之调用录像的方法
2019/12/05 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
2020/06/03 PHP
JavaScript库 开发规则
2009/01/31 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
jquery实现多条件筛选特效代码分享
2015/08/28 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
Js判断H5上下滑动方向及滑动到顶部和底部判断的示例代码
2017/11/15 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
小程序登录/注册页面设计的实现代码
2019/05/24 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
原生JS实现相邻月份日历
2020/10/13 Javascript
详解tensorflow实现迁移学习实例
2018/02/10 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
2020/02/26 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
英国足球店:UK Soccer Shop
2017/11/19 全球购物
高中生的学习总结自我鉴定
2013/10/26 职场文书
蓝颜请假条
2014/04/11 职场文书
2014国庆65周年领导讲话稿(3篇)
2014/09/21 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书