IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 抓取数据接口实现Q校园自动签到上报体温 -> 正文阅读

[Java知识库]抓取数据接口实现Q校园自动签到上报体温

前言

由于专升本的学校让每天通过Q校园进行上报体温,并且要连续14天位置不能变化,才能到校报到。

但是以我这个记忆力中间难免会漏一天,那就前功尽弃了,所以我就打算开发一个自动帮我上报体温、签到的系统。
在这里插入图片描述

目标

① 每天的位置不能改变

② 签到时间在18时-19时之间

③ 完全不需要我操作

前期准备

① 请求地址

既然准备搞一个自动签到的系统,那前提得先知道请求应该发给谁(请求地址),还有请求的参数等等。

这个很好解决,通过抓包工具,可以很轻松的抓到请求地址和所需参数:
在这里插入图片描述
在这里插入图片描述
通过如上三张图就得到了请求地址,请求参数,以及返回code为0时,为请求成功。

② 获取身份令牌

想要上报信息,需要在Cookie中携带身份令牌,我尝试在登录成功后将如下Cookie删除后提交体温数据,结果显示登录超时,所以肯定是它了没错。

该令牌是登录成功后服务器端设置的Cookie,所以我需要先进行登录并拿到身份令牌才能发起上报体温请求。
在这里插入图片描述

③ 位置信息

通过查看参数,可以看到位置信息是地图中地名,和该定位的经纬度。所以这个是不难的,用之前抓包抓到的数据就可以。

④ 定时上报

我需要系统定时帮我上报体温,完全不需要我操作。所以我想到了Java中定时器,可以设置每天或每周什么时间去执行某一个程序。

那么,到目前为止,我们需要的信息都有了,下面开始实际上手开发。

开发

① 定时执行

这里我用到的是SpringBoot中自带的多线程定时任务。

代码如下:

@Component          // IOC容器
@EnableScheduling   // 1.开启定时任务
@EnableAsync        // 2.开启多线程
@Slf4j              // 日志
public class MultithreadScheduleTask {
	@Autowired
    private ToolsService toolsService;
    
     /**
     * Q校园签到
     * @author 二饭
     */
    @Async
    @Scheduled(cron = "0 0 18 * * ?")  // 每天下午6点执行上报体温
    public void qSchoolSignin(){
        try {
            log.info("Q校园签到");
            String s = toolsService.signIn();
            log.info(s);
        }catch (Exception ex){
            ex.printStackTrace();
            log.error("Q校园签到失败-"+ex.getMessage());
        }
    }
}

② 获取身份令牌

开始我准备通过浏览器模拟登录操作,携带Cookie上报体温,但是显示跨域,登录操作没问题,上报体温时会显示跨域。因为这个我尝试Vue跨域配置,Ajax跨域配置,Nginx反向代理跨域配置都不起作用。

所以我决定换一条路,直接执行cURL脚本,通过尝试确实可以。

通过给脚本添加-c选项,将登录成功后的Cookie保存到一个文件中,然后携带这个Cookie再去发上报体温的请求。

原来脚本:

curl -X POST -H "Host:***.****.****" -H "Connection:keep-alive" -H "Content-Length:60" -H "Sec-Fetch-Mode:cors" ...

保存Cookie脚本:

curl -c "test.txt" -X POST -H "Host:***.****.****" -H "Connection:keep-alive" -H "Content-Length:60" -H "Sec-Fetch-Mode:cors" ...

在执行登录操作之后就可以在test.txt文件中看到Cookie身份令牌。

③ Java调用sh脚本

这里就又涉及到一个知识点,如何才能通过Java执行sh脚本,或者是执行Shell命令。

代码如下:

// 拼接Shell命令,脚本的绝对路径
String shell=qSchoolPath + "/login.sh"; 
// 执行登录
Process process = Runtime.getRuntime().exec(shell);
// 等待脚本执行完毕
process.waitFor();

④ 脚本传参

获取身份令牌后需要将身份令牌传参给上报体温脚本,否则脚本还是无法携带Cookie令牌。

这里又涉及到另一个知识点,Shell脚本传参:

// 返回cookie中的JSESSIONID
String result=getCookie(qSchoolPath+"/a.txt");
Process ps=Runtime.getRuntime().exec(new String[]{"/home/save.sh",result});
ps.waitFor();

执行./xxx.sh param命令,在脚本内可通过$1来获取参数,以此类推,$0是执行的文件名。

⑤ 执行步骤

定时任务执行 => 执行登录脚本 => 解析Cookie令牌 => 执行上报体温 => 返回状态码




此方法可无视上报体温必须下午五点之后的时间限制,随时都可以推送数据。

这个系统的后台入口我也找到了,后面要尝试一下破解密码进入后台系统。

今天就到这里,查看更多信息可关注公众号【全栈开发日记】。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章           查看所有文章
加:2021-08-04 11:03:50  更:2021-08-04 11:06:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/11 21:11:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码