文章11 | 阅读 5079 | 点赞0
项目需求:获取教务系统中的考试信息:
需要提交的表单数据如下所示:
Map<String, String> datas = new HashMap<>();
datas.put("xnm",String.valueOf(year));
datas.put("xqm",String.valueOf(term * term * 3));
datas.put("ksmcdmb_id","");
datas.put("kch","");
datas.put("kc","");
datas.put("ksrq","");
datas.put("_search","fasle");
datas.put("nd",String.valueOf(new Date().getTime()));
datas.put("queryModel.showCount","15");
datas.put("queryModel.currentPage","1");
datas.put("queryModel.sortName","");
datas.put("queryModel.sortOrder","asc");
datas.put("time","0");
这里注意一定要提交完整,一个都不要少!!
connection = Jsoup.connect(url+ "/jwglxt/kwgl/kscx_cxXsksxxIndex.html?gnmkdm=N358105&layout=default&su=" + stuNum);
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36");
url+ "/jwglxt/kwgl/kscx_cxXsksxxIndex.html?gnmkdm=N358105&layout=default&su=" + stuNum
就是网页最上方的网址。
response = connection.cookies(cookies_innet).cookies(cookies).method(Connection.Method.POST)
.data(datas).ignoreContentType(true).followRedirects(true).execute();
System.out.println(response.body());
打印之后惊奇地发现:返回的竟然不是json格式的字符串数据,也就是说不是我们需要的考试信息数据,而是该网页的网页源代码,并且源代码中也没有需要的考试的信息。
后面尝试了很多方法,比如说把所有的Request Header都加上(上面只弄了User-Agent这一个),去掉Form Data中数值为空白的item等等,始终都没有解决问题。后来在查看Form Data时,发现在Form Data上面有这个东西:
于是又想到网页url里面有gnmkdm和su两项:
url+ "/jwglxt/kwgl/kscx_cxXsksxxIndex.html?gnmkdm=N358105&layout=default&su=" + stuNum
唯独没有doType这一项,接着看到左边Network的Name:
这个url跟
connection = Jsoup.connect(url+ "/jwglxt/kwgl/kscx_cxXsksxxIndex.html?gnmkdm=N358105&layout=default&su=" + stuNum);
中的url区别是:没有了layout=default,多了一个doType=query。 于是我将里面的url换成了含有doType的这个:
connection = Jsoup.connect(url+ "/jwglxt/kwgl/kscx_cxXsksxxIndex.html?doType=query&gnmkdm=N358105&su=" + stuNum);
再次运行并打印:
Map<String, String> datas = new HashMap<>();
datas.put("xnm",String.valueOf(year));
datas.put("xqm",String.valueOf(term * term * 3));
datas.put("ksmcdmb_id","");
datas.put("kch","");
datas.put("kc","");
datas.put("ksrq","");
datas.put("_search","fasle");
datas.put("nd",String.valueOf(new Date().getTime()));
datas.put("queryModel.showCount","15");
datas.put("queryModel.currentPage","1");
datas.put("queryModel.sortName","");
datas.put("queryModel.sortOrder","asc");
datas.put("time","0");
connection = Jsoup.connect(url+ "/jwglxt/kwgl/kscx_cxXsksxxIndex.html?doType=query&gnmkdm=N358105&su=" + stuNum);
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36");
response = connection.cookies(cookies_innet).cookies(cookies).method(Connection.Method.POST)
.data(datas).ignoreContentType(true).followRedirects(true).execute();
JSONObject jsonObject = JSON.parseObject(response.body());
JSONArray examTable = JSON.parseArray(jsonObject.getString("items"));
for (Iterator iterator = examTable.iterator(); iterator.hasNext();) {
JSONObject lesson = (JSONObject) iterator.next();
System.out.println(lesson.getString("jxbmc") + " " +
lesson.getString("kch") + " " +
lesson.getString("jsxx") + " " +
lesson.getString("cdmc") + " " +
lesson.getString("kssj"));
}
这次就返回了我需要的数据,打印如下:
数据结构与算法(1)-0001 00601310 50501250/xxx/副教授 教3B 205 2019-06-17 09:00-11:00
大学物理(1)-0019 00900053 50201721/xxx/副教授 教3B 114 2019-06-19 14:00-16:00
中国近现代史纲要-0009 00700975 50701474/xxx/副教授 教3C 102 2019-06-21 14:00-16:00
学术英语-0007 00801400 50800339/xxx/教授 教3C 101 2019-06-25 14:00-16:00
高等数学B(2)-0013 00900140 50900326/xxx/副教授 教3B 109 2019-06-26 14:00-16:00
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/Cyril_KI/article/details/108348361
内容来源于网络,如有侵权,请联系作者删除!