android获取高校教务系统的数据原理分析

获取原理

想要获取到高校教务系统的数据,原理只有一个:

获取到教务系统的登陆Cookie的信息。

下面我拿我大学的学校的教务系统来分析分析;
首先我们要准备一个抓包的工具,推荐:win下Fiddler ,Mac下Charles。

接下来我将使用Charles这款工具,Charcles的使用需要注意的是不要开其他代理服务。比如翻墙的代理。

登陆系统

下面进入我们学校的电费查询系统,网址为:http://jn.hhtc.edu.cn:8021/XSCK/
进入系统,如图:

这里写图片描述

打开抓包工具,勾选Mac OS X Proxy。

这里写图片描述

随便选择一个寝室,输入密码进入系统。如果登陆成功,看看抓包看看数据:

这里写图片描述
可以看到这里有很多的参数,我们通过客户端去获取数据,只需用户名和密码就可以了。这样有一个问题,登陆页面需要验证码的输入,至于为什么这里不需要,这是这个系统的一个Bug。如果你的系统需要验证码,其实解决的方法也很简单,通过抓包工具,抓到这张验证码的图片,然后展示在客户端,让用户输入就可以了。

登陆成功后,我们还要一个数据,就是Cookie。很多的系统都是通过cookie来识别用户的身份,如图:

这里写图片描述

这里只需得到SessionId就可以了。

就这样我们通过抓包工具获取这两个数据,就可以对这个系统进行操作了。

  1. 用户名,密码
  2. SessionId

代码实现

下面我们使用hongyang的一个okhttp的工具,地址:https://github.com/hongyangAndroid/okhttp-utils

首先用户名和密码是要有,如果有朋友需要在这个系统上进行学习,可以私聊我,我可以提供用户名和密码给你。

然后通过上面的工具来获取SessionId。代码如下:

OkHttpUtils.post().url(URL)
                .addParams("用户名字段","用户名")
                .addParams("密码字段","密码")
                .build()
                .execute(new Callback() {
                    @Override
                    public Object parseNetworkResponse(Response response) throws IOException {

                        Headers headers = response.headers();
                        LogUtil.e(TAG, "--------> cookie = " + headers.get("Set-Cookie"));

                    }

                    @Override
                    public void onError(Request request, Exception e) {

                    }

                    @Override
                    public void onResponse(Object response) {

                    }
                });


    }

通过log的信息,我们知道这样就可以获取到Cookie 信息了,然后拿这个Cookie信息做其他操作.

我们就来这个Cookie信息来做其他操作,我们选择实时查看的功能。

这里写图片描述

点击实时查看,然后在浏览器查看源代码,分析源代码,定位我们需要的数据。这里我们只需要电费的余额:

这里写图片描述

这个label标签下的东西才是我们关心的。下面我们来看看在客户端通过代码是什么实现:

这里我们用到了一个工具Jsoup来解析Html网页数据,jar包的下载地址:https://jsoup.org/download

doc = Jsoup.connect(url).cookie("ASP.NET_SessionId", cookie).timeout(50000).get();

url的值为你要操作功能的地址,通过上面的代码就相当于我们点击实时查看的功能(假如url的值为实时查看的地址)。返回整个网页回来,我们看看怎么解析这个网页:

 Document content = Jsoup.parse(doc.toString());
 divs=content.select("#ctl00_ContentPlaceHolder1_ASPxRoundPanel1_BZ");
 String res = divs.text().trim();
 LogUtil.e(TAG, "----------> res = " + res.toString());

很简单通过 select的方法选择到我们关心到内容就可以了,而我们只需要关心余额到信息,而经过我们上面的分析,余额标签的id为
ctl00_ContentPlaceHolder1_ASPxRoundPanel1_BZ,所以我们通过这个Id就可以获取到我们需要的东西。

最终的效果:

这里写图片描述

其实这个最关键的得到Cookie,带有了这个cookie信息,你就可以随便操作这个系统上的任何内容。

如果你想要抓取,教务系统上的成绩,课程表信息,其原理都一样。

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值