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的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
nodejs入门教程六:express模块用法示例
Apr 24 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
NodeJS爬虫实例之糗事百科
Dec 14 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 NodeJs
nodejs各种姿势断点调试的方法
Jun 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
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php+resumablejs实现的分块上传 断点续传功能示例
2017/04/18 PHP
Laravel find in set排序实例
2019/10/09 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
js中function()使用方法
2013/12/24 Javascript
jQuery获得IE版本不准确webbrowser的解决方法
2014/02/23 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
vue路由中前进后退的一些事儿
2019/05/18 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
python三方库之requests的快速上手
2019/03/04 Python
Django配置跨域并开发测试接口
2020/11/04 Python
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
优秀中专生推荐信
2013/11/17 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
大学生个人求职信例文
2014/07/07 职场文书
大学团日活动新闻稿
2014/09/10 职场文书
2014镇副书记群众路线专题民主生活会思想汇报
2014/09/23 职场文书
五好家庭申报材料
2014/12/20 职场文书
大学生个人总结范文
2015/02/15 职场文书
入队仪式主持词
2015/07/04 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
2019教师的学习计划
2019/06/25 职场文书