预定会议室node程序

267 阅读3分钟

入口main.js

var fs = require("fs");var querystring = require('querystring');// var http = require('http');// var Util = require('./mod-http.js')var request = require('request');// 同步读取var data = fs.readFileSync('config.json');let CONFIG = JSON.parse(data.toString())// var timer = global.setInterval(app, 2000)app()/** * 预定会议室 */function app() {  // let url = 'http://svcm.paic.com.cn/svcmnew/login.do'  // let hostname = 'svcm.paic.com.cn'  // let path_get = '/svcmnew/login.do'  // let data_get = {  //   userName: 'nwhUCDIJ6wmR2p1KgXPnFw=='  // }  // Util.doGet(hostname, path_get, data_get)  // let path_post = 'svcm/j_security_check.do'  // let data_post = {j_username: 'wangqiang944', j_password: 'Wang81982066'}  // Util.doPost(hostname, path_post, data_post)  // console.log(Util.cookies);  // Util.setCookie()  // console.log(Util.cookies);  // appendSuccess('预定成功')  //设置头部 模拟浏览器请求  let headers = {    'User-Agent': `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36`,  }  let datas = {    j_username: 'WANGQIANG944',    Submit: '%B5%C7+%C2%BC',    j_password: 'johnson819820'  }  let opts_get = {    url: 'http://svcm.paic.com.cn/svcm/login.do',    method: 'GET',    // headers: headers  }  let opts_post = {    url: 'http://svcm.paic.com.cn/svcm/j_security_check',    method: 'POST',    headers: headers,    // form: datas,  }  let request = request.defaults({jar: true})  request(opts_get, function (error, response, body) {  // if (!error && response.statusCode == 200) {    console.log(response.headers);    console.log('---------------------------------------------------------------------------------');    // opts_post['Cookie'] = response.headers['set-cookie'] //这里是登陆后得到的cookie,(重点)    request(opts_post, function (error, response, body) {      console.log(response.headers);      console.log('---------------------------------------------------------------------------------');    })  })  // request('http://www.baidu.com').pipe(fs.createWriteStream('temp.txt'))}/** * 异步追加将成功结果写入文件 */function appendSuccess(msg, file = CONFIG.resfile) {  let data = new Date().toLocaleString() + '----' + msg + '\n'  fs.appendFile(file, data, function(err) {    if (err) {        return console.error('追加写入失败');    }    console.log('追加写入成功');  })}// // 清除后写入// fs.writeFile('success.txt', '我是通 过fs.writeFile 写入文件的内容',  function(err) {//    if (err) {//        return console.error(err);//    }//    console.log("清除写入成功!");// });

app.js

var request = require('request');var fs = require("fs");var tesseract = require('tesseract.js');var path = require("path");//设置头部 模拟浏览器请求let headers = {  'User-Agent': `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36`,}let datas = {  j_username: 'WANGQIANG944',  Submit: '%B5%C7+%C2%BC',  j_password: 'johnson'}let opts_get = {  url: 'http://svcm.paic.com.cn/svcm/login.do',  method: 'GET',  // headers: headers}let opts_post = {  url: 'http://svcm.paic.com.cn/svcm/j_security_check',  method: 'POST',  // headers: headers,  form: datas,}let req = request.defaults({jar: true})req(opts_get, function (error, response, body) {// if (!error && response.statusCode == 200) {  console.log(response.headers);  console.log('---------------------------------------------------------------------------------');  // opts_post['Cookie'] = response.headers['set-cookie'] //这里是登陆后得到的cookie,(重点)  req(opts_post, function (error, response, body) {    console.log(response.headers);    console.log('---------------------------------------------------------------------------------');    req(opts_get, (err, response, body) => {      console.log(body);      console.log('---------------------------------------------------------------------------------');      // 获取验证码      req('http://svcm.paic.com.cn//svcmnew/servlet/confirmCodeImgServlet').pipe(fs.createWriteStream('confirmCodeImg.jpeg'))      setTimeout(() => {        let image = path.resolve(__dirname, 'confirmCodeImg.jpeg')        tesseract.recognize(image, { classify_bln_numeric_mode: 1 }).then(data => {          console.log('99999999999999');          console.log(data.text);        }).catch(err => {          console.log(err);        })      }, 100)      // 请求校验验证码      let time = new Date().getTime()      let code = '2688'      req(`http://svcm.paic.com.cn/svcmnew/confmngt/createVideoConf.do?method=validateRand&flag=1&code=${code}&date=${time}`, (err, response, body) => {      })      // 预约会议室      opts_post.url = 'http://svcm.paic.com.cn/svcmnew/confmngt/createVideoConf.do?method=createVideoConfStep1'      opts_post.form = reserve_data      req(opts_post, (err, response, body) => {        console.log(response.headers);        console.log('---------------------------------------------------------------------------------');      })    })  })})let reserve_data = {  otherUser: false,  // maxTime: '2019-04-23',  maxTime: '2019-04-24',  typecount: 1,  yinhang: '',  keji: '',  seName: '',  pj: '-',  confName: '需求评审28',  phone: '15112584091',  now_year: '2019',  now_month: '03',  now_day: '22',  now_hours: '17',  now_min: '50',  startTime: '2019-04-22',  endTime: '2019-04-22 10:00:00',  hour: '09',  minute: '00',  csNowStart: 0,  userRole0: '',  regularMeetingType: 1,  regularMeetingNum: 1,  everyFewMonths: 1,  theFirstFew: 1,  week: 1,  replaceUser: '',  replacePhone: '',  confType: 2,  participatorNumber: 10,  confMode: 0,  isPassword: 'on',  password: '',  ifRecording: 0,  ifLiveStreaming: 0,  videotape: 0,  leader: '',  participator: '',  confParticipate: '',  seriesGroupId: 5,  seriesGroup: '平安银行',  mobileTerminalNum: 0,  mobileTerminalDesc: '',  chairman: '',  selectedItems: '62030',  isneedroom: 'on',  hardReserevedz: '',  hardReserevedj: '',  isneedsoftroom: 'on',  softResereved: '',  reservedParty: '',  reservedPartyNumber: 0,  ifVipAudioWaiting: false,  voiceMemberName: '',  vipAudioPhone: '',  vipAudioNum: '',  ishasphone: 'on',  audioNum: '',  code: '',}

http模块示例代码:

var fs = require("fs");var querystring = require('querystring');var http = require('http');module.exports = {  cookies: {    userName: 'nwhUCDIJ6wmR2p1KgXPnFw==',  },  /**   * 带参数发get请求   */  doGet: function(hostname, path, data) {    let self = this    var content = querystring.stringify(data); // a=123&time=1550396623022    var options = {      hostname: hostname, // hostname不能加前缀http,不能写成http://svcm.paic.com.cn      port: 80,      path: path + '?' + content,      method: 'GET',      // headers: {      //   'Cookie': this.getCookie()      // }    };    // console.log(options);    var req = http.request(options, function (res) {      // console.log('STATUS: ' + res.statusCode);      // console.log('HEADERS: ' + JSON.stringify(res.headers));      // console.log(res.headers['set-cookie']);      self.setCookie(res.headers['set-cookie'])      // console.log(self.cookies);      res.setEncoding('utf8');      res.on('data', function (chunk) {        // console.log('BODY: ' + chunk);        self.writeResponseBody(chunk)      });    });    req.on('error', function (e) {      console.log('problem with request: ' + e.message);    });    req.end(); }, /**  * 带参数发post请求  */ doPost: function(hostname, path, data) {   var opt = {       host:'www.baidu.com', //注意:不用协议部分(http://)       // host: hostname, //注意:不用协议部分(http://)       port: 80,       // path: path,       // path: '/testonly/doupload.php', //斜杠开头       method:'POST',       headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} //设置content-type 头部   };   var body = '';   var req = http.request(opt, function(res){ // 建立连接 和 响应回调       res.statusCode == 200 && console.log('REQUEST OK..' );       res.setEncoding('utf8');//res为ClientResponse的实例,是readableStream, 设置字符编码       res.on('data', function(chunk){           body += chunk;       }).on('end', function(){           console.log('Got data: ', body);//end事件中 打印全部响应数据       });   }).on('error', function(err){       console.log('error: ', err.message);   });   var post_data = querystring.stringify(data);  //注意 querystring.stringify 和 JSON.stringify的区别   req.write(post_data); // //发送请求。 write data to request body。req为ClientRequest的实例,是writableStream,写数据到流中   req.end();//结束请求 }, /**  * 保存cookie 将服务器传过来的cookie存储在内存中  */ setCookie: function(respCookieArr) {   for (let item of respCookieArr) {     let cookie = item.split(';')[0]     this.cookies[cookie.split('=')[0]] = cookie.split('=')[1]   } }, /**  * 获取cookie  */ getCookie: function() {   return this.cookies }, /**  * 将相应body写入response.html文件  */ writeResponseBody: function(data) {   fs.writeFile('response.html', data,  function(err) {      if (err) {          return console.error(err);      }      console.log("清除写入成功!");   }); }}