Lxxxxxxy_
Lxxxxxxy_
Published on 2019-10-05 / 86 Visits
0

重庆文理学院查询任何一个人成绩项目

时间

2019年10月5日20:16:38

效果展示

GIF

项目经过

大概在9月11日的时候,我发现了学校的一个api,这个api可以查到学校任何一个人的成绩。

QQ截图20191005210157

它的参数格式是这样的:

{"WID":"20175827403920182053425","XH":"201758274039","XM":"李星雨","KCDM":"053425","KCMC":"大学体育4","KCXZ":null,"XF":"1.0","CJ":"76.00","BKCJ":null,"XN":"2018-2019","XQ":"2","BZ":null}

比如想查姓名,只需要在后面加上XM=XX就可以。

本来想在当天就弄出来,结果模拟登录的时候始终有问题,就不了了之了。

今天又想找点事来做,于是把这个项目重新拿出来。

刚开始我发现是因为StringBuilder和Cookiestore有问题,没有被实例化。

CookieStore cookieStore = new BasicCookieStore();
public StringBuilder sb = new StringBuilder();

加上实例化以后,模拟登录成功了,但是访问 http://ehall.cqwu.edu.cn/publicapp/sys/cjcx/modules/cjcx/V_IT_KSCJ_CJB_QUERY.do?XH=201758274039 这个url的时候出了问题,出现了414 Request-URI Too Large的问题。我搜索了一下,发现是URL的问题。但是这个问题始终没有解决。

QQ截图20191005210738

在后面,我发现了一个问题,它是有一个302跳转的,虽然没有返回数据,但在控制台界面,我打印出来是提示我访问一个url。

QQ截图20191005211004

于是我使用下段代码,把url取出来,进行访问。

		String regex = "<a href=\"(.*?)\">";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(result1);
        String u = "";
        while (m.find()) {
            u = m.group(1);
        }

最终访问成功了,但是它只能打印默认的数据,也就是说是没有带任何参数时访问的数据。

QQ截图20191005211220

随后我便开始找原因,发现了是因为cookie没有获取,一个Cookie名为MOD_AUTH_CAS的。

于是我把 http://ehall.cqwu.edu.cn/publicapp/sys/cjcx/modules/cjcx/V_IT_KSCJ_CJB_QUERY.do?XH=201758274039&ticket=ST-6756524-hojXZFfqyCfzxw9vug9j1570280981809-3dff-cas 这种URL重新获取一下,把Cookie扒下来,但是还是有问题,后面我重新构建请求头,结果阴差阳错的就搞出来了。

最后,Thymeleaf,Jquery,Bootstrap一条龙,把前端弄出来,完成。

随后测试的时候发现 程序启动后只能访问一次,否则获取MOD_AUTH_CAS的那个链接会因为先前访问过而出现跟之前链接不一致的情况。

起初我是认为HttpClient没有正确关闭,于是使用httpClient.close();来关闭,发现还是不可以,随后我把StringBuilder和CookieStore都给清空,也还是不行,最终我使用

		sb=new StringBuilder();
        cookieStore.clear();

把它们两个重新实例化一遍,最终成功。