Java模拟登录正方教务管理系统

概述

这里我仅仅就说说怎么登录,后续有时间再更新怎么查成绩、课表等

工具

  • 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);开始进行查成绩操作
                }
            }
        });

然后就登录成功了:

这里写图片描述

总结

总的来说不是很多,关键要心细,有耐心。不懂的地方大家下面留言,一起交流,一起进步。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值