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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 05 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
nodejs中各种加密算法的实现详解
Jul 11 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 NodeJs
如何利用nodejs自动定时发送邮件提醒(超实用)
Dec 01 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获取远程图片并把它保存到本地的代码
2008/04/07 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
php中http与https跨域共享session的解决方法
2014/12/20 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
php实现简单的权限管理的示例代码
2017/08/25 PHP
PHP get_html_translation_table()函数用法讲解
2019/02/16 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
JQuery菜单效果的两个实例讲解(3)
2015/09/17 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
理解js回收机制通俗易懂版
2016/02/29 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
JS实现DOM节点插入操作之子节点与兄弟节点插入操作示例
2018/07/30 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
Python计算已经过去多少个周末的方法
2015/07/25 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
Python在Console下显示文本进度条的方法
2016/02/14 Python
浅谈Python peewee 使用经验
2017/10/20 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
通过pycharm使用git的步骤(图文详解)
2019/06/13 Python
Python读取csv文件实例解析
2019/12/30 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
calendar在python3时间中常用函数举例详解
2020/11/18 Python
python爬虫请求头的使用
2020/12/01 Python
python爬虫基础之urllib的使用
2020/12/31 Python
电子信息专业学生自荐信
2013/11/09 职场文书
道德大讲堂实施方案
2014/05/14 职场文书
客户付款通知书
2015/04/23 职场文书