Charles小書

前言

平常開發中,常常會有與App聯調的工做,除了iOS的Safari和Android的adb,用來查看console的信息,每每還須要抓取一下HTTP的數據包,用來確認網絡狀況。html

概述

Charles-thumb

Charles就是一款很是優秀的跨平臺網絡代理工具,支持Windows、Mac、Linux,不過最重要的是它的功能很是強大,固然這麼好的工具固然不是免費的,官方須要 $30 / license, 不過經過一些合做的代理商可能會便宜一些。ios

功能特色

  • 支持SSL代理 - 以純文本格式查看SSL請求和響應;
  • 支持限制帶寬 - 模擬低速的移動網絡或者網絡延遲的使用場景;
  • 支持AJAX調試 - 以樹或文本的形式查看XML和JSON請求和響應;
  • 支持AMF調試 - 以Flash的形式查看Flash Remoting / Flex Remoting消息的內容;
  • 支持重複請求以便於後端開發;
  • 支持編輯Request參數;
  • 支持攔截和編輯Request和Response的內容;
  • 支持檢查HTML,CSS和RSS內容是否符合W3C標準。

基本介紹

如何安裝本文就不累述了,官網介紹的很詳細了,也很簡單,對照着本身的環境,下載安裝包安裝便可。git

Charles的界面很簡潔,分爲Structure和Sequence模式,這2種模式能夠獲取的信息是差很少的,不過Sequence模式下多了一個便捷的Filter輸入框,能夠快速的過濾出來當前須要的查看的網絡請求。github

screenshot-sequence

如何使用

Charles啓動時默認會抓取本機的網絡請求,因此一開始,你可能會看到不少網絡請求的信息,若是你想中止或者清理,能夠用工具條上的便捷鍵來操做:
screenshot-tools後端

下面就說說在Mac下如何經過Charles抓取移動設備上的網絡請求。瀏覽器

主要步驟分爲如下幾步:安全

  1. 設置並開啓Charles代理;
  2. 配置移動設備代理;
  3. 若是須要抓取HTTPS,則須要配置SSL證書;

設置並開啓Charles代理

打開菜單,點擊 Proxy 一欄,就能夠看到 Proxy Settings... 的選項:
screenshot-setting-proxy服務器

接着在 Port: 一欄中填入代理的端口號,這裏填寫的是 8888
screenshot-proxy-settings網絡

點擊 OK 便可生效設置,而後再打開菜單,點擊 Help 一欄,找到到 Local IP Address 獲取本機當前局域網中的IP地址:
screenshot-local-ip工具

screenshot-local-ip-address

配置移動設備代理

以iOS爲例,操做步驟 設置 -> 無線局域網 -> wifi設置(歎號圖標) -> HTTP代理 -> 配置代理 -> 手動 -> 服務器(上一步獲取的本機局域網IP)端口(上一步設置的端口號)**:
screenshot-ios-wifi-proxy

若是一切順利,你的本機Charles會有一個提示出現:

screenshot-charles-allow-tip

選擇 Allow 就能夠代理你的iOS了:
screenshot-charles-ios

若是你僅僅是須要HTTP的代理,那麼上述的應該就能夠知足了,不過隨着HTTPS的推廣,就須要額外的設置SSL證書來獲取HTTPS的內容了。

配置SSL證書,抓取HTTPS

若是咱們在本身的服務上已經配置了SSL,開啓了HTTPS,那麼用HTTP的方式抓包就只能看到一堆的亂碼了。

這時候,不過咱們能夠用 Charles 做爲中間人來進行 HTTPS 的代理,用它的根證書動態簽發一張證書,同時讓你的瀏覽器收不到服務端證書的,而後 Charles 來假裝服務端的證書,你的瀏覽器接受 Charles 的證書用於SSL加密,而 Charles 仍然用目標服務器的 SSL 證書與服務端進行通訊,因此Charles就能夠用它本身的根證書來解碼你發出的請求了,若是想了解的更多,能夠去找找有關於中間人攻擊的資料。

具體到操做其實就3步:

  1. 在本機安裝 Charles 根證書;
  2. 在客戶端安裝 Charles 提供的證書;
  3. 開啓Charles的SSL Proxying;
在本機安裝 Charles 根證書

Charles提供了很是簡單的方式來安裝,你只須要打開菜單,點擊 Help 一欄,選中 SSL Proxying 就能夠看到 Install Charles Root Certificate 的選項:
screenshot-install-charles-root-certificate

點擊安裝之後,會打開本地的 Keychain Access 提示是否添加,選擇 Add 便可。
screenshot-add-charles-root-certificate

因爲Charles的提供的SSL根證書是它本身頒發的,並未通過權威機構的認證,因此,有時候會常常提示證書的安全性問題,這個時候,你能夠在 Keychain Access 中找到這個證書,並在 Trust 一項中選擇 Always Trust便可:
screenshot-keychain-access-trust

在客戶端安裝 Charles 提供的證書

打開菜單,點擊 Help 一欄,選中 SSL Proxying 就能夠看到 Install Charles Root Certificate on a Mobile Device or Remote Browser 的選項,它會提示你用須要鏈接的設備去訪問 chls.pro/ssl 這個URL:
screenshot-install-charles-root-certificate-client

客戶端在訪問 chls.pro/ssl,會獲得一個證書文件,不管是iOS仍是Android,都會進入證書的添加環節,下面以iOS爲例:
screenshot-client-ssl-installing

這裏須要注意一點,iOS 10.3之後的系統,須要在 證書信任設置 中啓用才行(Charles-ssl-certificates),操做步驟 設置 -> 通用 -> 關於本機 -> 證書信任設置 -> 開啓對應證書
screenshot-client-ssl-trusted

開啓Charles的SSL Proxying

打開Charles的菜單,點擊 Proxy 一欄,就能夠看到 SSL Proxy Settings... 的選項,而後增長一項規則便可:
screenshot-charles-ssl-proxy-settings

好了,本文就先介紹到這,最多也就是操做6步,你就能夠經過Charles截取HTTPS的數據包了,固然Charles的功能遠不止如此,更多的驚喜,你能夠慢慢的去挖掘。


參考

本文先發佈於個人我的博客 《Charles小書》,後續若有更新,能夠查看原文。
相關文章
相關標籤/搜索