概述
这里我仅仅就说说怎么登录,后续有时间再更新怎么查成绩、课表等
工具
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-urlencodedCookie:****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() {@Overridepublic void onFailure(Request request, IOException e) {System.out.println("登录失败");}@Overridepublic 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);开始进行查成绩操作}}});
然后就登录成功了:
总结
总的来说不是很多,关键要心细,有耐心。不懂的地方大家下面留言,一起交流,一起进步。