1. 程式人生 > >網頁抓包例項---校園助手app

網頁抓包例項---校園助手app

由於最近的博文一直在講抓包和MVP模式的東西,所以決定自己寫一個關於學校校園網成績抓包的專案,可是實現app登入校園網並對校園網資料進行抓取展示

軟體截圖

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

包結構

這裡寫圖片描述

設計思路

MVP模式

模式是從傳統的mvc模式改進為MVC模式,關於MVP模式的說明可以參考我之前寫過的關於MVP模式的介紹
presenter:資料控制中心,負責為每個ui介面適配資料
model:負責呼叫各個服務進行資料適配
Serviceapi:服務,也就是負責底層的訪問瀏覽器網頁並解析的行為
ui:ui層

Model層

model層分工比較明確,如下圖:
這裡寫圖片描述
引擎和服務組成了Model層,打個比方,例如說我要獲取成績,就必須要由引擎呼叫登入服務,然後再呼叫獲取成績服務,這樣一來,每個模組各自都有各自要做的事,程式碼結構非常清晰,相對於單元測試來說也比較方便。

M與P的互動

model與presenter之間的互動採用RxJava,可以讓每一步的邏輯線性化從而更加清晰,還是拿上面的例子來說,登入後獲取成績,如果沒有使用RxJava,可能就得陷入至少2此回撥中。
上面都只是舉個簡單的例子,在實際應用中,遠遠比上面說的要難地多,可以看看下面的邏輯圖:
這裡寫圖片描述
不難看出,在這裡資料邏輯和ui邏輯多重互動,如果只在一個Activity裡面寫這些邏輯,程式碼量和複雜程度可想而知,所以使用RxJava+MVP模式是一個很明智的選擇,資料邏輯在P中寫,ui邏輯在view中寫,然後P與M的互動則使用RxJava讓複雜的邏輯顯得更加清晰

錯誤處理

在上面展示的邏輯圖中還有一個很重要的點沒提出來,就是當遇到錯誤發生時怎麼辦?在做app的 過程經常遇到的錯誤有:

  • 網頁引數編碼錯誤導致訪問網頁失敗
  • 賬號密碼錯誤等
  • 網頁伺服器無響應
  • 客戶端網路斷開等

解決這些錯誤讓lz頭疼了好幾天,因為view層與資料控制層的分開,所以你並不能在activity裡面判斷具體的錯誤原因然後作出響應。規範的做法是在presenter中判斷錯誤,並控制view作出響應。所以這也是我在Presenter和Model層之間使用RxJava的一個重要原因,RxJava的一個重要特性就是如果在被觀察者執行的過程中跑出異常,則會中斷流程,直接呼叫觀察者的onError函式,並傳出異常;

 model.Login(username, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new
Observer<Html_Main>() { @Override public void onCompleted() { view.hideLoadingDialog(); } @Override public void onError(Throwable e) { view.showErrorDialog(((MyException) e).getViewErrorInfo()); } @Override public void onNext(Html_Main html_main) { Glo.html_main = html_main; ConstantValue.isOfficeLogin = true; view.hideLoadingDialog(); view.runMainAct(); } }) ;

當然在onError裡面要對Exception進行判斷是哪種錯誤