java spring boot (HTTP Client)实现从教务网 拉取课表

前言

对本文章出现的代码不是很了解的可以看上一篇文章 几分钟 就看完点这里 ,以及本次文章出现的网址不显示 只是分析。

一:导入所需要的依赖:

 <!-- 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) {
   
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值