入口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("清除写入成功!"); }); }}