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教程之异步I/O
Nov 21 NodeJs
Nodejs为什么选择javascript为载体语言
Jan 13 NodeJs
nodejs爬虫抓取数据乱码问题总结
Jul 03 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
Nodejs基于LRU算法实现的缓存处理操作示例
Mar 17 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
Nodejs模块的调用操作实例分析
Dec 25 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
nodejs+koa2 实现模仿springMVC框架
Oct 21 NodeJs
nodejs利用readline提示输入内容实例代码
Jul 15 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+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
PHP中break及continue两个流程控制指令区别分析
2011/04/18 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
10个超级有用值得收藏的PHP代码片段
2015/01/22 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
Javascript中JSON数据分组优化实践及JS操作JSON总结
2017/12/22 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
JavaScript Array对象使用方法解析
2019/09/24 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
python访问抓取网页常用命令总结
2017/04/11 Python
pandas 选择某几列的方法
2018/07/03 Python
python自动发送测试报告邮件功能的实现
2019/01/22 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
python查询MySQL将数据写入Excel
2020/10/29 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
使用javascript和HTML5 Canvas画的四渐变色播放按钮效果
2014/04/10 HTML / CSS
索尼巴西商店:Sony巴西
2019/06/21 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
物流专业毕业生推荐信范文
2013/11/18 职场文书
后进生转化工作制度
2014/01/17 职场文书
公司合作协议书范本
2014/04/18 职场文书
贷款承诺书范文
2014/05/19 职场文书
2014年城市管理工作总结
2014/12/02 职场文书
VUE递归树形实现多级列表
2022/07/15 Vue.js