更多內容,請訪問個人 我的博客。git
Charles 是收費軟件,能夠免費試用 30 天。試用期事後,未付費的用戶仍然能夠繼續使用,可是每次使用時間不能超過 30 分鐘,而且啓動時將會有 10 秒種的延時。所以,該付費方案對廣大用戶仍是至關友好的,即便你長期不付費,也能使用完整的軟件功能。只是當你須要長時間進行封包調試時,會由於 Charles 強制關閉而遇到影響。github
緊接着,軟件中就會出現抓取的網頁信息:json
Charles 主要提供兩種查看封包的視圖,分爲 Structure 和 Sequence:後端
在 Charles 的菜單欄上選擇 「Proxy」->」Proxy Settings」,填入代理端口 8888,而且勾上 「Enable transparent HTTP proxying」 就完成了在 Charles 上的設置。以下圖: 瀏覽器
Charles 頂部菜單的 「Help」->」Local IP Address」,便可在彈出的對話框中看到 IP 地址,以下圖:服務器
必定必定,手機和電腦要處於同一局域網下。 在手機的網絡設置中,填入剛纔獲取到的電腦IP和 Charles 上設置的端口,以下圖:網絡
完事以後,打開手機上任意須要聯網的程序,就能夠在 Charles 上看到請求鏈接的確認提示,點擊確認,以下:併發
必須安裝Charles的CA證書,否則 HTTPS 的返回結果會是一堆亂碼。工具
首先咱們須要在 Mac 電腦上安裝證書。點擊 Charles 的頂部菜單,選擇 「Help」 -> 「SSL Proxying」 -> 「Install Charles Root Certificate」,而後輸入系統的賬號密碼,便可在 KeyChain 看到添加好的證書。以下圖:測試
若是咱們須要在手機上截取 Https 的內容,還須要在手機上安裝相應的證書。點擊 Charles 的頂部菜單,選擇 「Help」 -> 「SSL Proxying」 -> 「Install Charles Root Certificate on a Mobile Device or Remote Browser」,而後就能夠看到 Charles 彈出的安裝教程。以下圖:
在設備上設置好 Charles 爲代理後,在手機瀏覽器中訪問地址:chls.pro/ssl ,便可打開證書安裝的界面,安裝完證書後,就能夠截取手機上的 Https 內容了。
在作移動開發的時候,咱們經常須要模擬慢速網絡或者高延遲的網絡,以測試在移動網絡下,應用的表現是否正常。Charles 對此需求提供了很好的支持。
在 Charles 的菜單上,選擇 「Proxy」->」Throttle Setting」 項,在以後彈出的對話框中,咱們能夠勾選上 「Enable Throttling」,而且能夠設置 Throttle Preset 的類型。以下圖:
若是咱們只想模擬指定網站的慢速網絡,能夠再勾選上圖中的 「Only for selected hosts」 項,而後在對話框的下半部分設置中增長指定的 hosts 項便可。
咱們可使用 Charles 的 Repeat 功能來簡單地測試服務器的併發處理能力,咱們在想打壓的網絡請求上(POST 或 GET 請求都可)右擊,而後選擇 「Repeat Advanced」菜單項,以下圖:
接着咱們就能夠在彈出的對話框中,選擇打壓的併發線程數以及打壓次數,肯定以後,便可開始打壓。
Charles 的反向代理功能容許咱們將本地的端口映射到遠程的另外一個端口上。例如,在下圖中,我將本機的 8080 端口映射到了遠程(pangao1990.github.io)的80端口上了。這樣,當我訪問本地的 8080 端口時,實際返回的內容會由 pangao1990.github.io 的 80 端口提供。
根據具體的需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,均可以達到修改服務器返回內容的目的。這三者在功能上的差別是:
Charles 的 Map 功能分 Map Remote 和 Map Local 兩種,顧名思義,Map Remote 是將指定的網絡請求重定向到另外一個網址請求地址,Map Local 是將指定的網絡請求重定向到本地文件。
在 Charles 的菜單中,選擇 「Tools」->」Map Remote」 或 「Map Local」 便可進入到相應功能的設置頁面。
對於 Map Remote 功能,咱們須要分別填寫網絡重定向的源地址和目的地址,對於不須要限制的條件,能夠留空。下圖是一個示例,我將全部 www.baidu.com 的請求重定向到了 pangao1990.github.io 。
對於 Map Local 功能,咱們須要填寫的重定向的源地址和本地的目標文件。對於有一些複雜的網絡請求結果,咱們能夠先使用 Charles 提供的 「Save Response…」 功能,將請求結果保存到本地(以下圖),而後稍加修改,成爲咱們的目標映射文件。
將一個指定的網絡請求經過 Map Local 功能映射到了本地的一個通過修改的文件中。
Map Local 在使用的時候,有一個潛在的問題,就是其返回的 Http Response Header 與正常的請求並不同。這個時候若是客戶端校驗了 Http Response Header 中的部份內容,就會使得該功能失效。解決辦法是同時使用 Map Local 如下面提到的 Rewrite 功能,將相關的 Http 頭 Rewrite 成咱們但願的內容。
Rewrite 功能功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。 例如,我博客返回的暱稱是「潘高」,我如今要改爲「大帥哥」,以下圖:
上面提供的 Rewrite 功能最適合作批量和長期的替換,可是不少時候,咱們只是想臨時修改一次網絡請求結果,這個時候,使用 Rewrite 功能雖然也能夠達到目的,可是過於麻煩,對於臨時性的修改,咱們最好使用 Breakpoints 功能。
Breakpoints 功能相似咱們在 Xcode 中設置的斷點同樣,當指定的網絡請求發生時,Charles 會截獲該請求,這個時候,咱們能夠在 Charles 中臨時修改網絡請求的返回內容。
須要注意的是,使用 Breakpoints 功能將網絡請求截獲並修改過程當中,整個網絡請求的計時並不會暫停,因此長時間的暫停可能致使客戶端的請求超時。