Charles之App開發使用

Charles 是我們app開發人員常用的截取網絡封包的工具。Charles通過將自己設置成網絡訪問代理,能夠監聽到所有的網絡請求,從而實現網絡的截取和分析。

Charkles 主要的功能包括:

  • 支持SSL代理

  • 支持流量控制

  • 支持AJAX調試。可以自動將JSON或XML數據格式化,方便查看

  • 支持AMF調試,可以將Flash Remoting 或Flex Remoting信息格式化

  • 支持重發網絡請求,方便後端調試

  • 檢查HTML、CSS和RSS內容是否符合W3C標準

Charles的安裝和使用

點擊下載Charles 下載最新版本的Charles安裝包

將Charles設置成系統代理

使用Charles的第一步就是將其設置成代理服務器來完成封包截取。

第一次啓動Charles 會提示你設置成代理。也可以忽略請求,然後在需要將Charles設置成系統代理時,選擇菜單中的”Proxy” -> “Mac OS X Proxy”來將Charles設置成系統代理,之後就能看到源源不斷網絡請求。

Charles 主要提供兩種查看封包的視圖,分別爲“Structure” 和 “Sequence”, 它們的功能分別爲:

  * Structure視圖將網絡請求按訪問的域名分類。
  * Sequence 視圖將網絡請求按訪問的時間排序
過濾網絡請求
  • 在主界面的中部的Filter欄中填入需要過濾出來的關鍵字。例如我們的服務器的地址是https://wsy.com 那麼我只需要在Filter欄中填入wsy即可。
  • 在Charles的菜單欄選擇“Proxy”->”Recording Settings”,然後選擇Include欄,選擇添加一個項目,然後填入需要監控的協議,主機地址、端口號。這樣就可以只截取目標網站的封包了,如下圖:
通常情況下 我們使用前一個做一些臨時性的封包過濾,後一個做一些經常性的封包過濾

使用Charles協助app開發

Charles通常用來截取本地的網絡封包,但是當需要時,我們也可以用它來截取其他設備上的網絡請求。下面我就以iPhone爲列。

Charles上的設置

要截取iPhone上的網絡請求,首先需要打開Charles的代理功能,在Charles的菜單欄上選擇”Proxy” -> “Proxy Settings”, 填入代理端口8888,並且勾選”Enable transparent HTTP proxying”,就完成了Charles的設置如下圖:

這裏寫圖片描述

iPhone上的設置

首先 我們要先獲得Mac上的ip地址,打開Terminal 輸入ifconfig en0,如下圖獲得該電腦的IP地址:

這裏寫圖片描述

在iPhone上的“設置”->“無線局域網”中,可以看到當前連接的WIFI名,通過單擊右邊的詳情按鈕,可以看到當前連接上的WIFI的詳情信息,包括IP地址、子網掩碼等信息。在其最底部有“HTTP代理”一項,我們將其切換成手動,然後填上Charles運行所在的電腦的IP地址,以及端口號8888,如下圖:

這裏寫圖片描述

設置好後,打開iPhone上的任意應用請求網絡,就可以看到Charles彈出請求連接確認菜單,單擊“Allow”按鈕即可完成設置,如下圖:

這裏寫圖片描述

模擬慢速網絡

在做app開發時,我常常需要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下的應用表現是否正常。Charles對此需求提供了很好的支持。
在Charles的菜單上,選擇“Proxy” -> “Throttle Setting”項,在彈出的對話框中,我們可以勾選上”Enable Throttling”, 並且可以設置Throttle Preset的類型,如下圖:

這裏寫圖片描述

如果我們只想模擬指定接口的慢速網絡,可以在上圖中勾選”Only for selected hosts”項,然後在對話框的下半部分設置中增加指定的Host即可。

截取SSL信息

Charles默認並不截取SSL的信息,如果你想截取某個網站上所有的SSL網絡請求,可以在該請求上單擊右鍵,選擇“Enable SSL Proxying”,如下圖。

這裏寫圖片描述

這樣,對於該HOST的所有SSL請求都可以被截取到了。

修改網絡請求內容

在app開發中爲樂調試接口,我們需要反覆嘗試不同參數的網絡請求。Charles可以方便地提供網絡請求的修改和重發功能。只需要在你要選擇的網絡請求上單擊上面菜單欄的的編輯圖案即可,即可創建一個可編輯的網絡請求。如下圖

這裏寫圖片描述

通過以上我們可以修改請求的任何信息,包括URL地址、端口、參數等等,之後單擊“Execute”按鈕即可發送修改後的網絡請求

修改服務器返回內容

根據具體的需求,Charles提供了Map功能,Rewrite功能及Breakpoints功能,它們都可以達到修改服務器返回內容的目的。這三者在功能上的差異是:

  • Map功能適合長期地將某一些請求重定向到另一個網絡地址或本地文件。
  • Rewrite功能適合對網絡請求進行一些正則替換
  • Breakpoints功能適合做一些臨時性的修改
Map功能

Charles的Map功能分Map Remote 和 Map Local兩種,顧名思義,Map Remote是將指定的網絡請求重定向到另一個網址,Map Local是將指定網絡請求重定向到本地文件。在Charles的菜單中,選擇”Tools”->”Map Remote”或“Map Local”即可進入相應功能的設置頁面,如下圖所示。

這裏寫圖片描述

對於 Map Remote 功能,我們需要分別填寫網絡重定向的源地址和目的地址,對於不需要限制的條件,可以留空,下圖是一個示列,將所有192.168.2.234(測試服務器)的請求重定向到了www.wsy.com(線上服務器)。

這裏寫圖片描述

對於Map Local功能,我們需要填寫重定向的源地址和目標文件。對於一些複雜網絡請求結果,我們可以先用Charles提供的”Save Response …”功能,將請求結果保存到本地,如下圖,然後稍加修改,使其成爲我們的目標映射文件。

這裏寫圖片描述

Rewrite功能

Rewrite 功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。例如,我們app有一個API請求是獲取用戶信息,而我當前的暱稱是”dingqiankun”
我們想試着直接修改網絡返回值,將”dingqiankun”換成“dingnan”,於是我們啓用Rewrite功能,然後按下圖進行設置。

這裏寫圖片描述

完成設置之後,我們就可以從Charles中看到,之後的API獲得的暱稱被自動Rewrite成了“dingnan”

Breakpoints功能

Rewrite功能最適合做批量和長期替換,但是很多時候,我們只是想臨時修改一次網絡請求結果,使用Rewrite功能雖然也可以達到目的,但是過於麻煩,對於臨時性修改使用Breakpoints。
如下圖所示臨時修改獲取用戶信息的API,將用戶的暱稱進行 了更改,修改完成後單擊“Execute”按鈕就可以讓網絡請求繼續進行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章