平常開發中,常常會有與App聯調的工做,除了iOS的Safari和Android的adb,用來查看console的信息,每每還須要抓取一下HTTP的數據包,用來確認網絡狀況。html
Charles就是一款很是優秀的跨平臺網絡代理工具,支持Windows、Mac、Linux,不過最重要的是它的功能很是強大,固然這麼好的工具固然不是免費的,官方須要 $30 / license, 不過經過一些合做的代理商可能會便宜一些。ios
如何安裝本文就不累述了,官網介紹的很詳細了,也很簡單,對照着本身的環境,下載安裝包安裝便可。git
Charles的界面很簡潔,分爲Structure和Sequence模式,這2種模式能夠獲取的信息是差很少的,不過Sequence模式下多了一個便捷的Filter輸入框,能夠快速的過濾出來當前須要的查看的網絡請求。github
Charles啓動時默認會抓取本機的網絡請求,因此一開始,你可能會看到不少網絡請求的信息,若是你想中止或者清理,能夠用工具條上的便捷鍵來操做:後端
下面就說說在Mac下如何經過Charles抓取移動設備上的網絡請求。瀏覽器
主要步驟分爲如下幾步:安全
打開菜單,點擊 Proxy 一欄,就能夠看到 Proxy Settings... 的選項:服務器
接着在 Port: 一欄中填入代理的端口號,這裏填寫的是 8888:網絡
點擊 OK 便可生效設置,而後再打開菜單,點擊 Help 一欄,找到到 Local IP Address 獲取本機當前局域網中的IP地址:工具
以iOS爲例,操做步驟 設置 -> 無線局域網 -> wifi設置(歎號圖標) -> HTTP代理 -> 配置代理 -> 手動 -> 服務器(上一步獲取的本機局域網IP) 和 端口(上一步設置的端口號)**:
若是一切順利,你的本機Charles會有一個提示出現:
選擇 Allow 就能夠代理你的iOS了:
若是你僅僅是須要HTTP的代理,那麼上述的應該就能夠知足了,不過隨着HTTPS的推廣,就須要額外的設置SSL證書來獲取HTTPS的內容了。
若是咱們在本身的服務上已經配置了SSL,開啓了HTTPS,那麼用HTTP的方式抓包就只能看到一堆的亂碼了。
這時候,不過咱們能夠用 Charles 做爲中間人來進行 HTTPS 的代理,用它的根證書動態簽發一張證書,同時讓你的瀏覽器收不到服務端證書的,而後 Charles 來假裝服務端的證書,你的瀏覽器接受 Charles 的證書用於SSL加密,而 Charles 仍然用目標服務器的 SSL 證書與服務端進行通訊,因此Charles就能夠用它本身的根證書來解碼你發出的請求了,若是想了解的更多,能夠去找找有關於中間人攻擊的資料。
具體到操做其實就3步:
Charles提供了很是簡單的方式來安裝,你只須要打開菜單,點擊 Help 一欄,選中 SSL Proxying 就能夠看到 Install Charles Root Certificate 的選項:
點擊安裝之後,會打開本地的 Keychain Access 提示是否添加,選擇 Add 便可。
因爲Charles的提供的SSL根證書是它本身頒發的,並未通過權威機構的認證,因此,有時候會常常提示證書的安全性問題,這個時候,你能夠在 Keychain Access 中找到這個證書,並在 Trust 一項中選擇 Always Trust便可:
打開菜單,點擊 Help 一欄,選中 SSL Proxying 就能夠看到 Install Charles Root Certificate on a Mobile Device or Remote Browser 的選項,它會提示你用須要鏈接的設備去訪問 chls.pro/ssl
這個URL:
客戶端在訪問 chls.pro/ssl
,會獲得一個證書文件,不管是iOS仍是Android,都會進入證書的添加環節,下面以iOS爲例:
這裏須要注意一點,iOS 10.3之後的系統,須要在 證書信任設置 中啓用才行(Charles-ssl-certificates),操做步驟 設置 -> 通用 -> 關於本機 -> 證書信任設置 -> 開啓對應證書:
打開Charles的菜單,點擊 Proxy 一欄,就能夠看到 SSL Proxy Settings... 的選項,而後增長一項規則便可:
好了,本文就先介紹到這,最多也就是操做6步,你就能夠經過Charles截取HTTPS的數據包了,固然Charles的功能遠不止如此,更多的驚喜,你能夠慢慢的去挖掘。
本文先發佈於個人我的博客 《Charles小書》,後續若有更新,能夠查看原文。