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下打包模块archiver详解
Dec 03 NodeJs
Nodejs中读取中文文件编码问题、发送邮件和定时任务实例
Jan 01 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
nodejs中全局变量的实例解析
Mar 07 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
详解Windows下安装Nodejs步骤
May 18 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs基础之常用工具模块util用法分析
Dec 26 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php学习之简单计算器实现代码
2011/06/09 PHP
使用PHP遍历文件目录与清除目录中文件的实现详解
2013/06/24 PHP
Linux操作系统安装LAMP环境
2015/06/26 PHP
使用PHP连接数据库_实现用户数据的增删改查的整体操作示例
2017/09/01 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
XML的代替者----JSON
2007/07/21 Javascript
js 刷新页面的代码小结 推荐
2010/04/02 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
Node.js DES加密的简单实现
2016/07/07 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
分析python动态规划的递归、非递归实现
2018/03/04 Python
python使用 __init__初始化操作简单示例
2019/09/26 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
澳大利亚领先的美容护肤品零售商之一:SkincareStore
2018/01/22 全球购物
HomeAway澳大利亚:预订你的度假屋,公寓、度假村、别墅等
2019/02/20 全球购物
大气污染防治方案
2014/05/19 职场文书
2014教师年度工作总结
2014/11/10 职场文书
先进个人评语大全
2015/01/04 职场文书
部队个人年终总结
2015/03/02 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
mysql 如何获取两个集合的交集/差集/并集
2021/06/08 MySQL
Vue + iView实现Excel上传功能的完整代码
2021/06/22 Vue.js
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL
canvas 中如何实现物体的框选
2022/08/05 Javascript