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 实现模拟form表单上传文件
Jul 14 NodeJs
nodejs的10个性能优化技巧
Jul 15 NodeJs
nodejs实现的一个简单聊天室功能分享
Dec 06 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
使用npm安装最新版本nodejs
Jan 18 NodeJs
Nodejs模块载入运行原理
Feb 23 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
nodejs微信开发之授权登录+获取用户信息
Mar 17 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 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
一个颜色轮换的简单例子
2006/10/09 PHP
PHP中fwrite与file_put_contents性能测试代码
2013/08/02 PHP
腾讯微博提示missing parameter errorcode 102 错误的解决方法
2014/12/22 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
encode脚本和normal脚本混用的问题与解决方法
2007/03/08 Javascript
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
js中top的作用深入剖析
2014/03/04 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
2017/09/20 Javascript
Webpack实战加载SVG的方法
2017/12/26 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
vscode中vue-cli项目es-lint的配置方法
2018/07/30 Javascript
jquery轻量级数字动画插件countUp.js使用详解
2019/10/17 jQuery
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
使用python 3实现发送邮件功能
2018/06/15 Python
对Python 数组的切片操作详解
2018/07/02 Python
python中的tcp示例详解
2018/12/09 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
关于ZeroMQ 三种模式python3实现方式
2019/12/23 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
巴西食品补充剂在线零售商:Músculos na Web
2017/08/07 全球购物
Haglöfs瑞典官方网站:haglofs火柴棍,欧洲顶级户外品牌
2018/10/18 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
广告词串烧
2014/03/19 职场文书
环保倡议书50字
2014/05/15 职场文书
2014大学辅导员工作总结
2014/12/02 职场文书
检察院起诉意见书
2015/05/20 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
python实现三次密码验证的示例
2021/04/29 Python
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA