作者:ryan__bug | 来源:互联网 | 2023-05-18 08:09
前言:我们学习过Android之后,总想写出一两个属于自己的应用,作为学生,可能我们最想尝试的就是实现一个Android版教务处,可以查成绩,学分,绩点,课表,还有学校新闻这样的a
前言:我们学习过Android之后,总想写出一两个属于自己的应用,作为学生,可能我们最想尝试的就是实现一个Android版教务处,可以查成绩,学分,绩点,课表,还有学校新闻这样的app吧。下面我们开始尝试!
2017 4.14 记:我打算将本应用当成系列博客来讲,敬请期待(ps:大家可以先熟悉下bmob后端云,融云及时通讯)
github地址:https://github.com/SharkChao/Tyut
欢迎下载!
要想从Android中登录教务处,目前有两种实现办法
1. 通过app嵌入webview来实现
2. 通过Android模拟登录来实现
对于第一种方法,可能只是简单的输入网址到webview中,从屏幕适配,用户体验各方面可能达不到我们的要求,所以接下来我主要讲解Android模拟登录教务处
先来一张示例图(知道我是哪个学校了吧)
一般而言,学校的教务处都会带有验证码,那么我们怎么获取这个验证码,并把验证码,账号,密码 一同发给学校的服务器呢?
我认为需要需要以下三个步骤:
1. 先访问学校教务处的登录页面,我们会拿到一个COOKIE,这个COOKIE至关重要。
2. 因为验证码这张图片也是从网址中获取的,所以我们应该拿着第一步中的COOKIE去访问验证码的网址,会拿到一张验证码图片。
3. 我们将验证码,账号,密码输入以后,需要拿着第一步中的COOKIE去访问登录页面。
4. (3.2号更新)后来我测试发现,可以省略第一步,直接先访问验证码图片网址,也是可以拿到一个COOKIE,带着这个COOKIE访问登录页面,也是可以的啊!
下面我们开始正式实现。
首先我们需要的工具是火狐浏览器,还有火狐浏览器插件firebug
下载后如图所示:
1.那么我们先使用firebug模拟一遍整个登录流程(原理)
先访问学校网站,如下图。
我们会发现一个现象,当所有界面元素都刷新出来以后,验证码的图片是最后才粗来的,我们有理由相信整个页面的展现流程是这样的:
1. 浏览器通过网址先访问学校服务器,服务器返回一个页面给我们,同时返回一个COOKIE给我们(这个COOKIE很重要!)
2. 我们拿着这个COOKIE去访问验证码图片的网址,服务器会给我们返回一个验证码图片(这个COOKIE就保证了我们的验证码,同 账号密码是在一个网页上)
3. 我们输入账号,密码,验证码。登录教务处,通过判断学校服务器给我们返回的html来判断是否登陆成功(这里就需要用到jsoup这个库来解析html)
2.原理解释清楚,我们就可以动手来实现模拟登录的功能了(过程)。
那就用我们学校来做个例子吧
(1)访问学校教务处网址,我们会拿到COOKIE
(2)我们看看验证码图片的网址是什么,在模拟的时候我们需要用第一步拿到的COOKIE去访问验证码网址,拿到一个图片。
(3)我们输入账号密码,还有验证码去访问教务处,拿到服务器返回给我们的html源码,我们就可以判断是否登陆成功了!(通过jsoup来解析html,通过标题我们就可以判断是否成功了!)
3.代码实现
我使用的是dagger2+retrofit+rxjava+mvp 来实现的。
当然对于一些没用过这些库的同学来讲,可以使用Android原生的httpclient来实现。代码我有时间会贴出来,有问题可以在博客底下留言,大家一块分享进步哈!
github地址:https://github.com/SharkChao/Tyut
欢迎下载!