概述
这里我仅仅就说说怎么登录,后续有时间再更新怎么查成绩、课表等
工具
- OkHttpClient(这个联网框架还不错)
- 抓包工具(这里演示的是使用chrome自带的)
流程简述
- 抓包,查看请求头,确定提交的信息
- 构建表单,请求头
详细流程
一、抓包
【不会的可以点这里】
这里的目标链接:我们学校的正方管理系统
开始:
我们点击红色框住的那个链接,就可以看到右边的详细信息了
我们来看看表单:
__VIEWSTATE:dDwyODE2NTM0OTg7Oz4H213j3BiKeXgjVheNPxLa8P8Bjw==//这货我也不知道是啥,通过尝试,直接传一样的就行
txtUserName:13408***//学号
TextBox2:******//密码
txtSecretCode:66mw//验证码
RadioButtonList1:(unable to decode value)//RadioButton,乱码,可以用URLEncoder.encode("学生", "gbk")代替
//下面四个不解释,传空值就行
Button1:
lbLanguage:
hidPdrs:
hidsc:
再看看请求头(鉴于篇幅,简要列几个重要的属性):
Content-Type:application/x-www-form-urlencoded
Cookie:****
Host:*****
根据抓包,发现需要提交的信息有:form表单,请求头得有Cookie。表单显而易见,那么Cookie从哪里来的呢—-这货是获取验证码传来的Cookie,所以我们还得请求一次验证码的链接,拿到Cookie→验证码图片链接
二、构建表单,获取验证码Cookie
构建表单:
FormEncodingBuilder builder = new FormEncodingBuilder();
builder.add("__VIEWSTATE",
"dDwyODE2NTM0OTg7Oz4H213j3BiKeXgjVheNPxLa8P8Bjw==");
builder.add("txtUserName", studentId);
builder.add("TextBox2", password);
builder.add("txtSecretCode", check_code);
builder.add("lbLanguage", "");
builder.add("RadioButtonList1", URLEncoder.encode("学生", "gbk"));
builder.add("Button1", "");
builder.add("hidPdrs", "");
builder.add("hidsc", "");
RequestBody requestBody = builder.build();
获取验证码图片并且返回拿到的Cookie:
public class DownloadImg {
private static FileOutputStream fos;
public static String downLoad(String url){
OkHttpClient okHttpClient = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
try {
Response response = okHttpClient.newCall(request).execute();
if(response.isSuccessful()){
byte[] bytes = response.body().bytes();
File file = new File("D:\\","check_code.png");//验证码下载到本地,手动输入
fos = new FileOutputStream(file);
fos.write(bytes);
fos.flush();
String cookie = response.header("set-cookie");
System.out.println("cookie:"+cookie);
return cookie;
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
构建请求头:
final String cookie = DownloadImg.downLoad("这里写验证码图片的链接");
Request request = new Request.Builder().url(school_url)
.addHeader("Cookie", cookie).post(requestBody).build();
三、构建完成开始模拟登录
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
System.out.println("登录失败");
}
@Override
public void onResponse(Response response) throws IOException {
if (response.isSuccessful()) {
System.out.println("登录成功");
String score_url = response.request().urlString();
System.out.println(score_url);
//Score(score_url, cookie);开始进行查成绩操作
}
}
});
然后就登录成功了:
总结
总的来说不是很多,关键要心细,有耐心。不懂的地方大家下面留言,一起交流,一起进步。