本人最近在做一个校园APP,其功能主要是查询学生课表、成绩等等。当然,学校教务处肯定不会给我们提供现成的API,那么就要使用Java来模拟浏览器登陆教务处网页。
其实用Java模拟登陆就是抓取浏览器所做的工作后,用Java语言实现这些工作。
第一步:用浏览器登陆教务处网站,抓取浏览器所做的工作
输入学号和密码及选择用户类型为学生后,点击登陆,抓取到浏览器的工作:
通过抓取到的浏览器所做的工作,我们知道:请求的URL、请求方法及POST发送的用户信息、请求头内容,还得到了响应头信息,因为这个请求返回的还不是学生课表页面,因此返回内容对我们没有用,我们只需要响应头中返回给我们的Cookie。
第二步:用Java来实现浏览器登陆这一行为
public class GetEverythingPrepared {
public static String LOGIN_URL = "http://sso.jwc.whut.edu.cn/Certification//login.do";
private String cerlogin;
private String jsessionid;
private int content_length;
public void login(String studyNumber, String password, String type) {
String postContent = "systemId=&xmlmsg=&userName="+studyNumber+"&password="+password+"&type="+type+"&imageField.x=60&imageField.y=24";
content_length = postContent.length; //请求消息长度
List<String> cookie = null;
try {
HttpURLConnection huc = (HttpURLConnection) new URL(LOGIN_URL).openConnection();
huc.setDoOutput(true);
huc.setRequestMethod("POST");
huc.setReadTimeout(6000);
loginSetRequestProperty(huc);
OutputStream postOS = huc.getOutputStream();
postOS.write(postContent.getBytes());
Map<String, List<String>> headerFields = huc.getHeaderFields();
cookie = headerFields.get("Set-Cookie");
cerlogin = cookie.get(0);
jsessionid = cookie.get(1);
} catch (MalformedURLException e) {
System.out.println("ERROR 1");
e.printStackTrace();
} catch (IOException e) {
System.out.println("ERROR 2");
e.printStackTrace();
}
}
public String getCerlogin() {
return cerlogin;
}
public String getJsessionid() {
return jsessionid;
}
private void loginSetRequestProperty(HttpURLConnection huc) {