iOS Charles抓包

QiShare發表於2019-01-28

級別:★★☆☆☆
標籤:「iOS手機抓包」「iOS HTTPS抓包」「Charles證照」
作者: Xs·H
審校: QiShare團隊


前言:在iOS應用開發過程中,通過抓包除錯服務介面的場景時常出現。Charles和Wireshark是我在iOS開發過程中最常用的兩款軟體。

在日常開發中,我們無法看到應用程式與伺服器之間傳送和接收的內容,沒有這種可見性,我們在確定故障的確切位置時會非常困難且耗時。而Charles是一個執行在PC上的Web代理,我們將應用程式配置為通過Charles訪問網路,便可以在Charles上記錄並顯示傳送和接收的所有資料,進而可以大大提高除錯程式的效率。Charles官網

從下圖可以看出Charles的角色:

iOS Charles抓包

Charles有以下幾個常用功能:

  • 請求預覽:通過分組或序列檢視預覽和過濾請求資料;
  • 請求抓包:抓取HTTP和HTTPS的請求資料和響應資料;
  • 請求斷點:攔截指定的請求或響應,預覽中間的資料;
  • 資料修改:修改請求資料和響應資料以配合資料測試;
  • 請求重發:指定請求重複傳送,以測試後端功能和效能;
  • 網速模擬:設定網速延遲,模擬手機上2G/3G/4G網路;

由於Charles的功能很多,很難在文章中詳盡介紹,所以作者以在專案中對Charles的使用為切入點,對最常用、最有用的幾個功能進行介紹。

一、安裝

Charles是收費軟體,有30天的免費試用期限,之後每使用30分鐘會被強退一次,重啟後可繼續使用。從Charles官網可以獲取Charles安裝包,也可以從網際網路中查詢破解版。

下載破解版時要注意甄別安裝包來源,謹防木馬和病毒。

二、請求預覽

Charles啟動後,就執行在抓包模式。由於Charles會自動配置PC瀏覽器的代理,所以,隨意開啟一個網頁(只要有網路請求即可)即可預覽到請求資訊。

如果使用外掛為瀏覽器設定了獨立代理,請關閉外掛或者設定成系統代理。

Charles提供了Structure和Sequence兩種預覽模式。 Structure以域名對請求進行分組,可以很方便地預覽同一域名下的請求資料,也方便於日常開發中對某一服務介面的分析和處理。圖示如下:

iOS Charles抓包

Sequence以時間順序顯示請求資訊,可以最直接的預覽請求資訊。在此模式下,可以使用Filter過濾請求,針對性分析。圖示如下:

iOS Charles抓包

在兩種模式下,都可以通過切換標籤(Overview、Request、Response等)預覽不同型別的請求資訊。在最常用的Request和Response標籤下,還可以通過切換子標籤(Headers、Cookies、Text等)預覽對應標籤詳細內容。圖示如下:

iOS Charles抓包

三、請求抓包

使用工具欄的白圓紅點按鈕(快捷鍵是“Command+R”)可以使Charles在抓包(Start Recording)和不抓包(Stop Recording)之間切換。使用此按鈕,在需要除錯時再開啟抓包功能可以有效減少干擾資訊,而快速抓取到需要除錯的請求。

對從手機(以iPhone示例)發出的請求進行抓包,需要保證iPhone和PC工作在同一區域網內。

1. 獲取PC的IP地址

在Charles選單欄 -> Help -> Local IP Address中可以檢視PC的IP地址。圖示如下:

iOS Charles抓包

也可以在Mac終端使用命令ifconfig en1檢視PC的IP地址。圖示如下:

iOS Charles抓包

2. 配置iPhone代理

在iPhone的設定 -> 無線區域網 -> 區域網資訊(i) -> 配置代理 -> 手動中配置代理,伺服器輸入框中填寫PC的IP地址,埠輸入框中填寫Charles的代理埠(一般是8888)。圖示如下:

iOS Charles抓包

具體的埠可以從Charles選單欄 -> Proxy -> Proxy Settings中檢視。圖示如下:

iOS Charles抓包

iPhone代理配置完成後,Charles會彈出連線提示框,點選Allow之後即可使用Charles對從該iPhone發出的請求進行抓包了。圖示如下:

iOS Charles抓包

3. 抓包HTTPS請求

在配置iPhone代理完畢後,就可以通過Structure或者Sequence視窗預覽HTTP請求的資料了。但由於HTTPS請求被加密過,預覽請求時只能預覽到亂碼資料。要預覽到HTTPS請求的資料明文,需要PC和iPhone安裝證照授權。

1) PC安裝證照

在Charles選單欄 -> Help -> SSL Proxying -> Install Charles Root Certificate中可以為PC安裝證照,證照可以在Mac的鑰匙串中檢視。圖示如下:

iOS Charles抓包

證照可以在Mac的鑰匙串中檢視,雙擊證照,將信任許可權設定為始終信任。圖示如下:

iOS Charles抓包

2) iPhone安裝證照

在iPhone瀏覽器中訪問http://charlesproxy.com/getssl可以下載證照並安裝。此地址一般不會變化,可以在Charles選單欄 -> Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser中檢視最新的官方證照下載地址。圖示如下:

iOS Charles抓包

基於iOS的證照信任機制,在安裝完成並信任證照後,需要到iPhone設定 -> 關於本機 -> 證照信任設定中啟用根證照。圖示如下:

iOS Charles抓包

這樣,就可以使用Charles中抓包iPhone發出的HTTPS請求並預覽明文資料了。

抓包模擬器上的HTTPS請求需要點選Install Charles Root Certificate in iOS Simulators安裝證照。

3) 啟動抓包SSL許可權

在Charles選單欄 -> Proxy -> SSL Proxying Settings中勾選Enable SSL Proxying,然後在Locations中新增需要抓包的Host和Port即可。圖示如下:

iOS Charles抓包

也可以在抓包介面,右鍵點選某條/組請求,在彈出的選項列表中點選Enable SSL Proxying啟用許可權。圖示如下:

iOS Charles抓包

四、請求斷點

在Charles的請求預覽介面中,右鍵點選某條/組請求,在彈出的選項列表中有Breakpoints選項。圖示如下:

iOS Charles抓包

點選Breakpoints後即為該請求設定了斷點。預設情況下,在該請求的Request / Response過程都會受斷點控制,即在Request資料傳送到的服務端之前會被暫停,在Response資料傳送到客戶端之前也會被暫停。可以從Charles選單欄 -> Proxy -> Breakpoint Settings中編輯斷點的引數。比如,只需要對Response過程加斷點,可以將Request的勾選狀態取消。圖示如下:

iOS Charles抓包

在斷點狀態下,可以預覽和修改請求的中間資料,之後點解Execute按鈕即可繼續執行請求。

五、資料修改

RewriteBreakpoint Editing都可以起到修改請求資料的作用。

1. Rewrite

在Charles選單欄 -> Tools -> Rewrite中可以開啟Rewrite功能,點選Add按鈕可以新增一條設定,並可以在右側的LocationsRules中分別新增要Rewrite的請求路徑和Rewrite規則。圖示如下:

iOS Charles抓包

Rewrite適合應用於對請求的批量和長期修改,對請求資料影響較大(測試結束後經常忘記去掉規則)。所以,在一些輕量級的資料修改場景中,我經常結合Breakpoint功能修改資料。

2. Breakpoint Editing

結合斷點功能,可以很好的實現臨時修改請求的Request / Response資料的需求。為某條請求設定斷點後,當該請求發生時,會自動跳到斷點視窗。點開Edit Request / Response介面,可以看到中間資訊,選擇合適的資料格式(HTML、Json等)進行修改。修改完成後,點選Execute按鈕即可在終端上看到修改後的的效果。圖示如下:

iOS Charles抓包

iOS Charles抓包

六、請求重發

在Charles的請求預覽介面中,右鍵點選某條/組請求,在彈出的選項列表中有RepeatAdvanced Repeat兩個選項。圖示如下:

iOS Charles抓包

單擊Repeat會重發該請求一次,常用於測試服務介面能否正常訪問,客戶端能否正常收到返回資料等。單擊Advanced Repeat會彈出重發引數編輯頁面,圖示如下:

iOS Charles抓包

在此編輯介面上,可以自定義Iterations(重發次數)、 Concurrency(併發數)和 Repeat(重發延時),常用於對服務介面進行壓力測試。

七、網速模擬

在Charles選單欄 -> Proxy -> Throttle Settings中可以啟用Throttling(節流)功能,並自定義Locations(受限服務介面)和Throttle Configuration(節流配置)。支援對Throttle preset(預置的資料傳輸方式)、Bandwidth(頻寬) Utilisation(利用比率)、 Round-trip latency(往返延遲)、MTU(最大傳輸單元) Reliability(可靠性) Stability(穩定性)等引數進行編輯。其中,在Throttle preset支援模擬3G/4G網路環境。圖示如下:

iOS Charles抓包

使用Throttle功能,可以方便地排插因為若網而導致的bug,而這類bug線上上很容易出現,而且很難排查復現。


小編微信:可加並拉入《QiShare技術交流群》。

iOS Charles抓包

關注我們的途徑有:
QiShare(簡書)
QiShare(掘金)
QiShare(知乎)
QiShare(GitHub)
QiShare(CocoaChina)
QiShare(StackOverflow)
QiShare(微信公眾號)

推薦文章:
初探TCP
初探IP、UDP
iOS 多執行緒之執行緒安全
iOS 多執行緒之GCD
iOS 多執行緒之NSOperation
iOS 多執行緒之NSThread
iOS Winding Rules 纏繞規則
奇舞週刊

相關文章