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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
在windows上用nodejs搭建静态文件服务器的简单方法
Aug 11 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
nodejs redis 发布订阅机制封装实现方法及实例代码
Dec 15 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
使用 NodeJS+Express 开发服务端的简单介绍
Apr 07 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 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
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
php中call_user_func函数使用注意事项
2014/11/21 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
JavaScript的jQuery库中function的存在和参数问题
2015/08/13 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
详解vue-cli脚手架中webpack配置方法
2018/08/22 Javascript
微信小程序适配iphoneX的实现方法
2018/09/18 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
Python实现的径向基(RBF)神经网络示例
2018/02/06 Python
python读文件保存到字典,修改字典并写入新文件的实例
2018/04/23 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
使用python求解二次规划的问题
2020/02/29 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
介绍java中初始化块的使用
2012/09/11 面试题
ruby如何进行集成操作?Ruby能进行多重继承吗?
2013/10/16 面试题
优质的学校老师推荐信
2013/10/28 职场文书
2014年高数考试作弊检讨书
2014/12/14 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
公司员工奖惩制度
2015/08/04 职场文书
2016春季田径运动会广播稿
2015/12/21 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
mysql升级到5.7时,wordpress导数据报错1067的问题
2021/05/27 MySQL
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android