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 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
NodeJS制作爬虫全过程
Dec 22 NodeJs
NodeJS的Promise的用法解析
May 05 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
详解使用nodeJs安装Vue-cli
May 17 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
nodejs实现套接字服务功能详解
Jun 21 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 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函数array_merge用法一例(合并同类数组)
2013/02/03 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
2013/11/11 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
2014/05/29 PHP
Yii核心验证器api详解
2016/11/23 PHP
PHP全功能无变形图片裁剪操作类与用法示例
2017/01/10 PHP
JavaScript表达式:URL 协议介绍
2013/03/10 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
js基于setTimeout与setInterval实现多线程
2016/06/17 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
javascript中的隐式调用
2018/02/10 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
2018/09/28 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
vue和H5 draggable实现拖拽并替换效果
2020/07/29 Javascript
Python深入学习之装饰器
2014/08/31 Python
Python批量更改文件名的实现方法
2017/10/29 Python
python抓取网页中链接的静态图片
2018/01/29 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
python实现坦克大战游戏 附详细注释
2020/03/27 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
django中的图片验证码功能
2019/09/18 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
警察思想汇报
2014/01/04 职场文书
今冬明春火灾防控工作方案
2014/05/29 职场文书
2014年材料员工作总结
2014/11/19 职场文书
婚宴新郎致辞
2015/07/28 职场文书
婚宴致辞
2015/07/28 职场文书
情人节单身感言
2015/08/03 职场文书
Python机器学习之基础概述
2021/05/19 Python