使用Charles抓包
Charles 是在 Mac 下常用的截取網絡封包的工具(Win 環境也已支持),在移動端開發過程中,我們常需要截取網絡包分析服務端的通訊協議。Charles 將自己設置成系統的網絡訪問代理服務器,不僅可以提供 SSL 代理,還支持流量的控制、支持重發網絡請求、支持修改網絡請求參數、支持網絡響應截獲并動態修改。
安裝Charles
從 Charles 的 官方網站 下載最新的安裝包,下載晚完成安裝即可。
Charles 是付費軟件,當然免費狀態也可以使用。可以使用如下信息完成注冊:
Registered Name: https://zhile.io License Key: 48891cf209c6d32bf4如果注冊失敗,可以嘗試 這種方法。
設置成系統代理服務器
由于 Charles 是通過將自己設置成代理服務器來完成封包截取的,所以第一步是需要將 Charles 設置成系統的代理服務器。
啟動 Charles 后,菜單中的 “Proxy” -> “Windos Proxy(或者Mac OS X Proxy)”, 來將 Charles 設置成系統代理。如下所示:
配置后,就可以在界面中看到截取的網絡請求。但是,Chrome 和 Firefox 瀏覽器默認并不使用系統的代理服務器設置, 所以需要將 Chrome 和 Firefox 設置成使用系統的代理服務器,或者直接設置成地址127.0.0.1:8888。
如果 Chrome 已安裝了 Host Switch Plus 插件,則需要暫時關閉。
過濾網絡請求
一般情況下,我們只需要監聽指定服務器上發送的請求,可以使用如下辦法解決:
- 方式1:在主界面 “Sequence” -> “Filter” 欄位置輸入需要過濾的關鍵字即可。例如輸入fanhaobai,則過濾輸出只包含 fanhaobai 信息的請求。
- 方式2:在 Charles 的菜單欄選擇 “Proxy” -> ”Recording Settings”,并選擇 Include 欄,添加一條永久過濾規則,主要填入需要截取網站的協議、主機地址、端口號。
- 方式3:右擊需要過濾的網絡請求,選擇 “Focus” 選項即可。
方式 1 和方式 3 可以快速地過濾臨時性網絡請求,使用方式 2 過濾永久性網絡請求。
截取移動設備網絡包
Charles 除了可以截取本地的網絡包,作為代理服務器后,同樣可以截取移動設備的網絡請求包。
設置Charles
截取移動設備網絡包時,需要先將 Charles 的代理功能打開。在 Charles 的菜單欄上選擇 “Proxy” -> ”Proxy Settings”,填入默認代理端口 8888,且勾選 “Enable transparent HTTP proxying” 就完成了設置。如下圖所示:
iPhone
首先,通過 Charles 的頂部菜單的 “Help” -> ”Local IP Address” 獲取本地電腦的 IP 地址,例如我的本機電腦為192.168.1.102。
在 iPhone 的 ”設置“ -> ”無線局域網“ 中,對當前局域網連接設置 HTTP 代理(端口默認為 8888),如下圖:
設置完成后,打開 iPhone 的任意程序,在 Charles 就可以彈出連接確認窗口,點擊 ”Allow” 即可。
Android
在 Android 上操作同 iPhone,只是某些系統設置方式不一致而已。
截取 Https 包
如果需要截取并分析 Https 協議信息,需要安裝 Charles 的 CA 證書。
本地通信信息
點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,即可完成證書的安裝。如下圖所示:
建議將證書安裝在 ”受信任的根證書頒發機構“ 存儲區。
特別說明,即使安裝完證書后,Charles 默認是不會截取 Https 網絡通訊的信息。對于需要截取分析站點 Https 請求,可以右擊請求記錄,選擇 SSL proxy 即可,如圖所示:
移動設備的通信信息
如果在 iPhone 或 Android 機器上截取 Https 協議的通訊內容,需要手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后按照 Charles 的提示的安裝教程安裝即可。如下圖所示:
在上述 截取移動設備網絡包 為手機設置好代理后,手機瀏覽器中訪問地址http://chls.pro/ssl,即可打開證書安裝的界面。安裝完證書后,就可以截取手機上的 Https 通訊內容了。注意,同樣需要在要截取的網絡請求上右擊,選擇 SSL proxy 菜單項。
如果 SSL proxy 后出現如下錯誤:
可將證書設置為信任即可,例如 iPhone 下 “設置” -> “通用” -> “關于本機” -> “證書信任設置” 下:
模擬慢請求
在做 App 開發調試時,經常需要模擬慢請求或者高延遲網絡,以測試應用在網絡異常情況變現是否正常,而這使用 Charles 就輕松幫我們完成。
在 Charles 的菜單上,選擇 “Proxy” -> ”Throttle Setting” 項,在彈出的窗口中,可以勾選上 “Enable Throttling”,并且可以設置 Throttle Preset 的類型。如下圖所示:
當然可以通過 “Only for selected hosts” 項,只模擬指定站點的慢請求。
修改請求內容
有時為了調試服務端的接口,我們需要反復嘗試不同參數的網絡請求。Charles 可以方便地提供網絡請求的修改和重發功能。只需在該網絡請求上點擊右鍵,選擇 “Compose”,即可創建一個可編輯的網絡請求。
我們可以修改該請求的任何信息,包括 URL 地址、端口、參數等,之后點擊 “Execute” 即可發送該修改后的網絡請求。Charles 支持我們多次修改和發送該請求,這對于我們和服務器端調試接口非常方便,如下圖所示:
修改響應內容
有候為方便我們調試一些特殊情況,需要服務器返回一些特定的響應內容。例如數據為空或者數據異常的情況,部分耗時的網絡請求超時的情況等。通常讓服務端配合,構造相應的數據顯得會比較麻煩,這個時候,使用 Charles 就可以滿足我們的需求。
根據不同的場景需求,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 功能(選中 Enable Map Remote),我們需要填寫網絡重定向的源地址和目的地址,對于其他非必需字段可以留空。下圖是一個示例,我將測試環境t.fanhaobai.com的請求重定向到了生產環境www.fanhaobai.com。
對于 Map Local 功能(選中 Enable Map Local),我們需要填寫的重定向的源地址和本地的目標文件。對于有一些復雜的網絡請求結果,我們可以先使用 Charles 提供的 “Save Response…” 功能,將請求結果保存到本地并稍加修改,成為我們的目標映射文件。
Rewrite功能
Rewrite 功能功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。
例如,將服務端返回的www.fanhaobai.com全部替換為www.baidu.com,如下:
將響應中的www.fanhaobai.com全部替換為www.baidu.com。于是在 “Tools” -> "Rewrite" 下配置如下的規則:
選中 “Enable Rewrite” 啟用 Rewrite 功能 ,響應如下:
Breakpoints功能
上面提供的 Rewrite 功能最適合做批量和長期的替換,但是很多時候,我們只是想臨時修改一次網絡請求結果,這個時候,我們最好使用 Breakpoints 功能。
在需要打斷點的請求上右擊并選擇 “Breakpoints”,重新請求該地址,可以發現客戶端被掛起,Charles 操作界面如下:
此時可以修改請求信息,但這里只修改響應信息,故點擊 “Execute” 后選擇 “Edit Response” 項,修改 title 為fanhaobai.com,如下:
繼續點擊 “Execute” ,可看見響應的 title 已經變為fanhaobai.com。
壓力測試
我們可以使用 Charles 的 Repeat 功能來簡單地測試服務器的并發處理能力。在想壓測的網絡請求上右擊,然后選擇 "Repeat Advanced” 項,如下所示:
這樣我們就可以在上圖的對話框中,選擇壓測的并發線程數以及壓測次數,確定之后,即可開始壓力測試了。
反向代理
Charles 的反向代理功能允許我們將本地的端口映射到遠程的另一個端口上。
總結
以上是生活随笔為你收集整理的使用Charles抓包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 以短带长进军网综,西瓜视频能否干过“优爱
- 下一篇: go设计模式之代理模式