解析 URP 教务系统, 创建查成绩 APP !

写在前面

国庆在学校没事干,正好某课程表的查成绩功能又双叕崩了,一怒之下把它卸载!(课程表功能推荐苏大学长写的 wakeup课程表,各大商店都有)

正好学了点 kotlin,开始了我的小白安卓开发之旅~

2021年更新:
适配了最新版URP系统,美化UI设计,修改项目地址为:
https://github.com/SukiEva/Myhhu

欢迎 Star 和 Fork!

特别警告:

连接教务系统需在内网下,即连接校园网才能成功,
直接使用流量连接会卡死,请在校园网或校园VPN连接下使用该APP!

成果图

(别问我为什么有的UI没对齐,都是为了适配我自己的手机o(╥﹏╥)o

开始干活

声明一下使用了哪些依赖,防止看代码看不懂,很多操作通过已有的库会简化很多。

	implementation 'org.jsoup:jsoup:1.13.1'
    implementation "com.squareup.okhttp3:okhttp:4.9.0"
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    implementation "org.jetbrains.anko:anko:$anko_version"
    implementation 'androidx.gridlayout:gridlayout:1.0.0'
    implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:3.0.4'
1、模拟登陆

模拟登陆和爬取信息我之前用python的Requests库写过了,所以只是把相关换成了Java 的 okhttp 和 jsoup。

思路是通过okhttp请求验证码的链接,并记录cookie,通过 bitmap 将图片显示在android上。

这部分我是看的 Android客户端加载网站验证码(okHttp Jsoup)

网页请求分析我就不介绍了,直接贴代码:

// LoginActivity.kt
private fun loadingCaptchaPic() {
   
        //client = OkHttpClient()
        initJwxt()
        client = OkHttpClient().newBuilder()
            .cookieJar(object : CookieJar {
   
                //cookie的缓存区
                private val cookieStore: HashMap<String, List<Cookie>> = HashMap()
                override fun saveFromResponse(url: HttpUrl, cookies: List<Cookie>) {
   
                    //添加cookie
                    cookieStore[url.host] = cookies
                    cookie = cookies[0].name + "=" + cookies[0].value
                }

                override fun loadForRequest(url: HttpUrl): List<Cookie> {
   
                    val cookies = cookieStore[url.host]
                    //当Request 连接到网络的时候,OkHttp会调用loadForRequest()
//                    if (cookies != null) {
   
//                        println("加载了cookie:" + cookies)
//                    }
                    return cookies ?: ArrayList()
                }
            }).build()

        val ImgUrl = homeUrl + "validateCodeAction.do"
        //加载验证码图片代码
        Thread(
            object : Runnable {
   
                var captchaPic: Bitmap? = null
                override fun run() {
   
                    try {
   
                        val request = Request.Builder()
                            .removeHeader("User-Agent")
                            .addHeader(
                                "User-Agent",
                                "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4209.2 Safari/537.36"
                            )
                            .url(ImgUrl)
                            .build()
                        val response = client!!.newCall(request).execute()
                        val `is`: InputStream = response.body
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值