手机版

NodeJs模仿啜饮话机注册的方法

时间:2021-08-22 来源:互联网 编辑:宝哥软件园 浏览:

本项目需要对应的后端接口、信令环境才能正常运行,本文章只涉及前端内容。

项目依赖模块:

开发读取线:命令行输入ws:与服务端建立求转发到连接超级代理:与服务端建立请求连接,效果类似创建交互式、快速动态网页应用的网页开发技术请求tsk_md5:项目登录密码使用讯息摘要5加密项目需求

模拟啜饮话机频繁向服务器发起注册请求,以得到服务器最大啜饮注册数

项目实现概述

终端输入连续注册分机的开始分机号和结束分机号终端输入统一的啜饮注册密码终端输入服务器地址先进行用户登录鉴权,用户登录鉴权通过后再发起啜饮注册代码分析

1.引入项目所需模块

var WebSocket=require('ws '),superagent=require('superagent '),tskMD5=require(' ./tsk _ MD5 ')const readline=require(' readline ');2.创建读取线接口实例

const rl=readline。创建接口({ input : process。stdin,output: process.stdout,提示符: ' OHAI ' });3.定义所需变量

var obj={},httpHeader={ },baseUrl=' ',pass=' ',ip=' ',websocketUrl=''var keepWsAlive,readyState4 .读取读取线输入信息函数

函数getReadline(){ const lines=[];//用于保存所有输入信息console.log('请输入扩展名范围(eg: 1001,1010):\n') rl.on('line ',function(line){ if(line==' '){ console。日志('输入为空,请再次输入: \ n ')} else { line。推(行);if(行。长度===1){ obj。分机sarr=线路。split(',');console.log('请输入密码(eg:1234aa):\n') }否则如果(行。长度===2){ obj。密码=线路;pass=lineconsole.log('请输入IP(如:192。168 .124 .125): \ n ')} else if(行。length===3){ WebSocketURl=' ws ://' line ' :8089/ws ';obj . WebSocketURl=WebSocketURlobj . IP=line IP=线路;console.log('启动寄存器.\ n ');//开始注册事件loopRegister(obj)} } });//关闭事件监听rl.on('close ',function(){ //结束程序过程。退出(0);});}终端运行截图

5.注册事件中包含几个动作

1)设置httpHeader:浏览器与服务器创建交互式、快速动态网页应用的网页开发技术请求有固定的请求头信息,此处模拟浏览器的请求头信息。

用于后续发送请求进行用户登录鉴权。

函数setHttpHeader(username){ httpHeader={ accept : ' application/JSON,text/javascript,*/*;q=0.01 ',' Accept-Encoding': 'gzip,deflate ',' Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,pt;q=0.7 ' ',缓存控制' : '无缓存,Connection: 'keep-alive ',' Content-Type ' : ' application/x-www-form-URL编码;charset=UTF-8 ',Cookie : ' TRACKID=' TRACKID session-identify=sid 121076289-1520217430;用户名=adminuser_id=0 ',Host: ip ':8089 ',Origin: 'http://' ip ':8089 ',Pragma: '无缓存,参考3360 ' http://' IP ' :8089/gswave/',' User-Agent ' : ' Mozilla/5.0(Windows NT 6.1;WOW64)applebwebkit/537.36(KHML,像壁虎)Chrome/38。0 .2125 .122 Safari/537.36 SE 2 .X MetaSr 1.0 ',' X-Requested-With ' : ' XMLHttpRequest ' } var帐户数据={ action : ' challenge ',用户: username }基本URL=' http://' IP ' :8089/webrtccgi '?getChanllenge(帐户数据,用户名)//用户鉴权函数}2)用户登录鉴权(本项目中与服务器交互需要使用,具体使用看服务器端设置)

!-账号密码鉴权-函数getChanllenge(accountData,username){控制台。日志(' start getchanglenge ')var challenge=' '//获取挑战超级特工。帖子(baseUrl).set(HttpAder).类型(“形式”).发送(帐户数据)。重定向(0)。end(函数(err,result){ if(类型为(result)=' undefined '){ console。错误('获取挑战为错误,结果为未定义’);} else { var responce=result。主体if(response response。status===0){ challenge=response。回应。挑战GetCooKie(挑战,用户名)} else { console。错误('获取挑战是错误,结果.身体.状态不是0 ')} } });} !饼干鉴权-函数getCookie(挑战,用户名){ var md5key=tskMD5 .MD5.hexdigest(挑战通过)//MD5加密用户登录密码var subData={ token: md5key,action: 'login ',user: username } //开始请求进行用户登录密码鉴权,类似创建交互式、快速动态网页应用的网页开发技术请求超级绅士。帖子(baseUrl).set(HttpAder).类型(“形式”).发送(子数据)。重定向(0)。end(函数(err,RES){ if(RES的类型)=' undefined '){ console。日志('获取cookie为错误,结果为未定义’);} else { var response=RES . body if(响应响应。状态===0){//登录鉴权通过,开始执行啜饮注册var cookie=responce。回应。cookie/注册函数startSocket(username)} else { console。日志('获取cookie为错误,结果.身体.状态不是0 ')} })}与服务器建立求转发到连接

项目中信令交互信息均通过求转发到发送

var ws=new WebSocket(WebSocket turl,' sip ');# 注意建立的是啜饮类型的websocket ws.on('open ',函数open(){ console。日志(' ws open message 1 ' message 1)readyState=web套接字.OPEN //发送相关信息ws.send(消息);});ws.on('消息',函数传入(数据){ a;var DataArr=数据。分割(' \ r \ n ')if(DataArr[0]).indexOf('401') -1 a===1) { //发送注册信令函数(其中发送信令信息,均参考浏览器的发送头进行拼接)startRegister(ws,dataArr,username) } else if (dataArr[0].indexOf(' 200 '){//ws。close()//控制台。日志('注册成功. ')} else { });以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

版权声明:NodeJs模仿啜饮话机注册的方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。