记1次对学校体温打卡进行数据抓包并实现自动打卡功能
作者:互联网
为什么做这个
学校要求每天8点半之前进行体温打卡上报(纯粹的形式主义),导员班长会打电话催人,被迫催了好几次,被逼无奈,只好简单写个体温自动打卡脚本。
用到的工具
- Vs code
- fiddler抓包软件
- 微信客户端
用到的技术
nodejs+express、axios、node-schedule、mongodb等
因为可能会让别人也用到,所以也用到了数据库、路由,并没有在后台硬编码写死。
实现
原理:学校的体温打卡是微信小程序,这里我用fiddler抓包,可以自动解码https,抓取到它的体温提交地址以及携带的参数,在我们的服务器后台跑个服务,准时请求即可实现自动体温打卡,最后安安稳稳的睡大觉。
- fiddler截图
数据很简单,没有任何加密。
temp=36.6 就是体温的数值
前面的参数就是验证提交人信息的数据。
- 我们开始请求体温打卡
// 一个定时任务的模块
var schedule = require('node-schedule');
// 使用axios请求
const { default: axios } = require("axios");
// 封装的DB查询
const DB = require('./DB')
// 定时规则
var rule = new schedule.RecurrenceRule();
rule.hour =0;
rule.minute =0;
rule.second =0;
var j = schedule.scheduleJob(rule, async function(){
// 这里是体温地址
const url = '体温请求地址'
const stuRes = await DB.find('stuData',{})
// 帮别人自动打卡,所以库里有很多数据,遍历提交
for (let i = 0; i < stuRes.length; i++) {
// 早上体温填报
axios({
url: url,
method:'POST',
data:`这里是请求携带的参数(私密)`,
headers:{
'content-type':'application/x-www-form-urlencoded'
}
}).then(res=>{
console.log(res.data);
})
// 中文体温填报
axios({
url: url,
method:'POST',
data:`这里是请求携带的参数(私密)`,
headers:{
'content-type':'application/x-www-form-urlencoded'
}
}).then(res=>{
console.log(res.data);
})
}
});
- 接收传过来的数据存入数据库
const express = require('express')
const bodyParser = require('body-parser')
const fs = require("fs");
const https = require("https");
const DB = require('./DB')
const app = express()
const port = 3001
// 我这里用微信小程序开发所以用的https 当然单纯一个网页会更简单。
const httpsOption = {
key : fs.readFileSync("./2_yuanxiaoshen.com.key"),
cert: fs.readFileSync("./1_yuanxiaoshen.com_bundle.pem")
}
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.get('/watch', async(req,res)=>{
const stuRes = await DB.find('stuData',{})
res.send(stuRes)
})
app.post('/add', async (req, res) => {
const { stuId, rand } = req.body
if(!stuId || !rand) {
res.send('不能为空')
}
const stuRes = await DB.find('stuData', {'stuId':stuId})
if(stuRes.length){
// 更新操作
const settingRes = await DB.update('stuData',{'stuId':stuId},{'rand':rand})
res.send({
msg:'更新成功'
})
}else{
// 添加操作
const settingRes = await DB.insert('stuData', {'stuId':stuId, 'rand':rand})
res.send({
msg:'插入成功'
})
}
})
https.createServer(httpsOption, app).listen(port);
- 在本地测试完成后,上传服务器
我这里使用centos服务器运行
pm2进行进程守护 - 后台开发好了,那前端微信小程序也要来
就2个输入框+一个请求就可以了,这里简单,就不罗列了,单纯就截个图吧。
- 最后的话
因为比较简单,代码写的简单粗暴些,不是那么优雅。
终于可以安稳的睡大觉楼~~~
搜索关注公众号:日常学习宝。
标签:const,res,require,DB,体温,打卡,抓包 来源: https://blog.csdn.net/weixin_42940467/article/details/113527329