时间
2019年10月5日20:16:38
效果展示
项目经过
大概在9月11日的时候,我发现了学校的一个api,这个api可以查到学校任何一个人的成绩。
它的参数格式是这样的:
{"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的问题。但是这个问题始终没有解决。
在后面,我发现了一个问题,它是有一个302跳转的,虽然没有返回数据,但在控制台界面,我打印出来是提示我访问一个url。
于是我使用下段代码,把url取出来,进行访问。
String regex = "<a href=\"(.*?)\">";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(result1);
String u = "";
while (m.find()) {
u = m.group(1);
}
最终访问成功了,但是它只能打印默认的数据,也就是说是没有带任何参数时访问的数据。
随后我便开始找原因,发现了是因为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();
把它们两个重新实例化一遍,最终成功。