本文爲InfoQ中文站特供稿件,首發地址爲:文章連接。如需轉載,請與InfoQ中文站聯繫。ios
Charles是在Mac下經常使用的截取網絡封包的工具,在作iOS開發時,咱們爲了調試與服務器端的網絡通信協議,經常須要截取網絡封包來分析。Charles經過將本身設置成系統的網絡訪問代理服務器,使得全部的網絡訪問請求都經過它來完成,從而實現了網絡封包的截取和分析。json
Charles是收費軟件,能夠免費試用30天。試用期事後,未付費的用戶仍然能夠繼續使用,可是每次使用時間不能超過30分鐘,而且啓動時將會有10秒種的延時。後端
所以,該付費方案對廣大用戶仍是至關友好的,即便你長期不付費,也能使用完整的軟件功能。只是當你須要長時間進行封包調試時,會由於Charles強制關閉而遇到影響。服務器
Charles主要的功能包括:網絡
支持SSL代理。能夠截取分析SSL的請求。工具
支持流量控制。能夠模擬慢速網絡以及等待時間(latency)較長的請求。測試
支持AJAX調試。能夠自動將json或xml數據格式化,方便查看。網站
支持AMF調試。能夠將Flash Remoting 或 Flex Remoting信息格式化,方便查看。url
支持重發網絡請求,方便後端調試。spa
支持修改網絡請求參數。
支持網絡請求的截獲並動態修改。
檢查HTML,CSS和RSS內容是否符合W3C標準。
去Charles的官方網站(http://www.charlesproxy.com)下載最新版的Charles安裝包,是一個dmg後綴的文件。打開後將Charles拖到Application目錄 下即完成安裝。
若是你須要截取分析SSL協議相關的內容。那麼須要安裝Charles的CA證書。具體步驟以下:
去 http://www.charlesproxy.com/ssl.zip 下載CA證書文件。
解壓該zip文件後,雙擊其中的.crt文件,這時候在彈出的菜單中選擇「老是信任」,以下所示:
從鑰匙串訪問中便可看到添加成功的證書。以下所示:
以前提到,Charles是經過將本身設置成代理服務器來完成封包截取的,因此使用Charles的第一步是將其設置成系統的代理服務器。
啓動Charles後,第一次Charles會請求你給它設置系統代理的權限。你能夠輸入登陸密碼授予Charles該權限。你也能夠忽略該請求,而後在須要將Charles設置成系統代理時,選擇菜單中的 「Proxy」 –> 「Mac OS X Proxy」來將Charles設置成系統代理。以下所示:
以後,你就能夠看到源源不斷的網絡請求出如今Charles的界面中。
Charles主要提供2種查看封包的視圖,分別名爲「Structure」和」Sequence」。
Structure視圖將網絡請求按訪問的域名分類。
Sequence視圖將網絡請求按訪問的時間排序。
你們能夠根據具體的須要在這兩種視圖以前來回切換。
對於某一個具體的網絡請求,你能夠查看其詳細的請求內容和響應內容。若是響應內容是JSON格式的,那麼Charles能夠自動幫你將JSON內容格式化,方便你查看。
一般狀況下,咱們須要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。對於這種需求,咱們有2種辦法。
在主界面的中部的Filter欄中填入須要過濾出來的關鍵字。例如咱們的服務器的地址是:http://yuantiku.com ,那麼只須要在Filter欄中填入yuantiku便可。
在Charles的菜單欄選擇」Proxy」–>「Recording Settings」,而後選擇Include欄,選擇添加一個項目,而後填入須要監控的協議,主機地址,端口號。這樣就能夠只截取目標網站的封包了。以下圖所示:
一般狀況下,咱們使用方法1作一些臨時性的封包過濾,使用方法2作一些常常性的封包過濾。
Charles一般用來截取本地上的網絡封包,可是當咱們須要時,咱們也能夠用來截取其它設備上的網絡請求。下面我就以iPhone爲例,講解如何進行相應操做。
要截取iPhone上的網絡請求,咱們首先須要將Charles的代理功能打開。在Charles的菜單欄上選擇「Proxy」->「Proxy Settings」,填入代理端口8888,而且勾上」Enable transparent HTTP proxying」 就完成了在Charles上的設置。以下圖所示:
首先咱們須要獲取Charles運行所在電腦的IP地址,打開Terminal,輸入ifconfig en0
, 便可得到該電腦的IP,以下圖所示:
在iPhone的 「設置」->「無線局域網「中,能夠看到當前鏈接的wifi名,經過點擊右邊的詳情鍵,能夠看到當前鏈接上的wifi的詳細信息,包括IP地址,子網掩碼等信息。在其最底部有「HTTP代理」一項,咱們將其切換成手動,而後填上Charles運行所在的電腦的IP,以及端口號8888,以下圖所示:
設置好以後,咱們打開iPhone上的任意須要網絡通信的程序,就能夠看到Charles彈出iPhone請求鏈接的確認菜單(以下圖所示),點擊「Allow」便可完成設置。
Charles默認並不截取SSL的信息,若是你想對截取某個網站上的全部SSL網絡請求,能夠在該請求上右擊,選擇SSL proxy,以下圖所示:
這樣,對於該Host的全部SSL請求能夠被截取到了。
在作iPhone開發的時候,咱們經常須要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。Charles對此需求提供了很好的支持。
在Charles的菜單上,選擇」Proxy」–>「Throttle Setting」項,在以後彈出的對話框中,咱們能夠勾選上「Enable Throttling」,而且能夠設置Throttle Preset的類型。以下圖所示:
若是咱們只想模擬指定網站的慢速網絡,能夠再勾選上圖中的」Only for selected hosts」項,而後在對話框的下半部分設置中增長指定的hosts項便可。
有些時候爲了調試服務器的接口,咱們須要反覆嘗試不一樣參數的網絡請求。Charles能夠方便地提供網絡請求的修改和重發功能。只須要在以往的網絡請求上點擊右鍵,選擇「Edit」,便可建立一個可編輯的網絡請求。以下所示:
咱們能夠修改該請求的任何信息,包括url地址,端口,參數等,以後點擊「Execute」便可發送該修改後的網絡請求(以下圖所示)。Charles支持咱們屢次修改和發送該請求,這對於咱們和服務器端調試接口很是方便。
經過Charles軟件,咱們能夠很方便地在平常開發中,截取和調試網絡請求內容,分析封包協議以及模擬慢速網絡。用好Charles能夠極大的方便咱們對於帶有網絡請求的App的開發和調試。
參考連接: