文章目录
前言
对本文章出现的代码不是很了解的可以看上一篇文章 几分钟 就看完点这里 ,以及本次文章出现的网址不显示 只是分析。
一:导入所需要的依赖:
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
由于我是用swagger 来进行 测试的 不需要前端页面 所以还导了依赖:(如果要自己写前端可以不用导)
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.0</version>
</dependency>
二:对自己教务网进行分析
1:进入自己教务网 直接F12
选择 network
2:开始登录 注意看左边的变化
3:点击查看 (这一步主要是找到 登录需要传输什么数据)
记住则合格url 等下 就给这个网址传post请求
往下拉到底:
注意这个form data 就是你在登录的时候 需要输入的东西
4:分析传输数据各个意义
这一步需要回到你教务处的 登录页面 按F12 进行元素审查
到这一步 分析完成:
user:学号
pwd:密码
lb: 学生or老师
submit: 对于登录来说不需要传参
sign: 隐藏的用于登录识别的 (我们学校的这个 是隔一段时间刷新并非写死的 后面要用jsoup来获取)
5:打开课表所在位置:
打开右边最后一个出现的:
复制这个 request url 打开看看是不是 你的课表是的话 就结束了记住这个网址 以及自己分析参数 那个id1=4 表示 我是第四学期的课表。
三:开始敲代码:
前言:
我用的是swagger 所以 我不写前端直接开始后端:
swagger 非这篇文章 但是有需要的 看 这篇文章点这里
0:思路分析
前言:你首先 有httpClient 基础! 没有看这篇文章速成一下点这里
1: 针对我们学校 首先得 拿到我说的那个 sign 这需要用jsoup的一点技术即可 下面的代码有实现的注释
2: 得到了后 开始传递分析好的参数 页面的状态码是 302 表示成功 200表示密码错误等等消息
3:登录成功后 在用httpcilent (同一个httpcilent!) 进入刚刚找到的课表页面。 获取页面的数据
4:获取到数据后 用jsoup 的select 选择出 table 里面的数据
再自己 写个实体类和方法 把课表信息存进去。
1:创建一个HttpClientUtils 来封装一些参数
package com.example.demo.utils;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import java.awt.color.CMMException;
/**
* @description:
* @author: Code-zyc
* @date: Created in 2021/4/15 15:55
* @version: v1.0
* @modified By:
*/
public class HttpClientUtils {
//创建连接池管理器
static PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
public static PoolingHttpClientConnectionManager getCm(){
//池子里面最多有多少条数据
cm.setMaxTotal(100);
//每台主机分配多少的链接
cm.setDefaultMaxPerRoute(10);
return cm;
}
public static HttpGet setHttp(HttpGet httpGet){
RequestConfig requestConfig=RequestConfig.custom()
.setConnectTimeout(1000) //设置创建链接的时间
.setConnectionRequestTimeout(500) //获取链接的时间
.setSocketTimeout(10*1000) //返回数据的时间
.build();
httpGet.setConfig(requestConfig);
return httpGet;
}
public static HttpPost setHttp(HttpPost httpPost){
RequestConfig requestConfig=RequestConfig.custom()
.setConnectTimeout(1000) //设置创建链接的时间
.setConnectionRequestTimeout(500) //获取链接的时间
.setSocketTimeout(10*1000) //返回数据的时间
.build();
httpPost.setConfig(requestConfig);
return httpPost;
}
}
2:查看了 获取到的table 里面信息 创建一个 实体类:
package com.example.demo.bean;
/**
* @description:
* @author: Code-zyc
* @date: Created in 2021/4/14 20:17
* @version: v1.0
* @modified By:
*/
public class SiChuan {
private String time;
private String nameAndTeacher;
private String classroom;
private String week;
@Override
public String toString() {
return "SiChuan{" +
"time='" + time + '\'' +
", nameAndTeacher='" + nameAndTeacher + '\'' +
", place='" + classroom + '\'' +
", wake='" + week + '\'' +
'}';
}
public SiChuan() {
}
public String getNameAndTeacher() {
return nameAndTeacher;
}
public void setNameAndTeacher(String nameAndTeacher) {