获取原理
想要获取到高校教务系统的数据,原理只有一个:
获取到教务系统的登陆Cookie的信息。
下面我拿我大学的学校的教务系统来分析分析;
首先我们要准备一个抓包的工具,推荐:win下Fiddler ,Mac下Charles。
接下来我将使用Charles这款工具,Charcles的使用需要注意的是不要开其他代理服务。比如翻墙的代理。
登陆系统
下面进入我们学校的电费查询系统,网址为:http://jn.hhtc.edu.cn:8021/XSCK/:
进入系统,如图:
打开抓包工具,勾选Mac OS X Proxy。
随便选择一个寝室,输入密码进入系统。如果登陆成功,看看抓包看看数据:
可以看到这里有很多的参数,我们通过客户端去获取数据,只需用户名和密码就可以了。这样有一个问题,登陆页面需要验证码的输入,至于为什么这里不需要,这是这个系统的一个Bug。如果你的系统需要验证码,其实解决的方法也很简单,通过抓包工具,抓到这张验证码的图片,然后展示在客户端,让用户输入就可以了。
登陆成功后,我们还要一个数据,就是Cookie。很多的系统都是通过cookie来识别用户的身份,如图:
这里只需得到SessionId就可以了。
就这样我们通过抓包工具获取这两个数据,就可以对这个系统进行操作了。
- 用户名,密码
- 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