1、首先打开教务系统的登录页面,F12 开启浏览器调试,注意一下 Request Headers 一栏的 Cookie 选项,我们一会需要拿这个 Cookie 去提交登录请求,否则会提示:请登录 或者 出现错误。
2、输入账号密码后点击登录,可以看到请求提交过程以及 FormData 发送的数据:
这个 loginAction.do 就是要提交验证的地址
3、下面写代码:
public class Test {
//下面的 Url 请求就是通过浏览器调试中 Network 一栏获取到的,需要多多调试
//基本 Url
private static String baseUrl = "http://202.206.161.174:9080/";
//分数查询 Url
private static String scoreUrl = baseUrl + "gradeLnAllAction.do?type=ln&oper=fainfo&fajhh=5325";
//课表查询 Url
private static String courseUrl = baseUrl + "xkAction.do?actionType=6";
//学籍信息 Url
private static String userInfoUrl = baseUrl + "xjInfoAction.do?oper=xjxx";
//注销 Url
private static String logoutUrl = baseUrl + "logout.do";
//session 的键
//Cookie 的格式:Cookie : JSESSIONID=******,那么 sessionId 就是等号后面的一串字符,提交请求携带这个参数的值即可
private static String sessionName = "JSESSIONID";
public static void main(String[] args) {
try {
//获取 Cookie
Connection.Response res = Jsoup.connect(baseUrl)
.method(Method.GET)
.execute();
String sessionId = res.cookie(sessionName);
System.err.println(sessionId);
//登录请求提交
Connection.Response login = Jsoup.connect(baseUrl + "loginAction.do")
.header("Cookie", sessionName + "=" + sessionId) //携带刚才的 Cookie 信息
.data("zjh", "账号", "mm", "密码")
//这里的 zjh 和 mm 就是登录页面 form 表单的 name
.method(Method.POST)
.execute();
//此时 sessionId 为可用状态
Document scoreDoc = Jsoup.connect(scoreUrl).cookie(sessionName, sessionId).get();
System.err.println(scoreDoc);
System.err.println("-------------------");
//注销请求
Document logoutDoc = Jsoup.connect(logoutUrl).cookie(sessionName, sessionId).post();
} catch (IOException e) {
e.printStackTrace();
}
}
}
4、运行部分截图:
上图中已经返回了 html 信息,这里只截取了一部分。demo 基本完成了。
代码不算难,但是思路要注意:起初的思路是先执行登录请求,然后获取到 Cookie 后再获取数据,但是总是出现 “用户未登录” 类似的提示,思路改正为上面的即可。
初学,欢迎批评指正。