1、charles的使用前端
1.1 charles的說明ios
Charles實際上是一款代理服務器,經過過將本身設置成系統(電腦或者瀏覽器)的網絡訪問代理服務器,而後截取請求和請求結果達到分析抓包的目的。該軟件是用Java寫的,可以在Windows,Mac,Linux上使用。安裝Charles的時候要先裝好Java環境。git
Charles的主要功能:後端
(1)截取Http 和 Https 網絡封包。瀏覽器
(2)支持重發網絡請求,方便後端調試。安全
(3)支持修改網絡請求參數。服務器
(4)支持網絡請求的截獲並動態修改。網絡
(5)支持模擬慢速網絡。session
1.1.1 charles的下載和安裝數據結構
一、安裝包的下載
(1)進入官網下載地址:http://www.charlesproxy.com/,點擊連接下載30天免費試用版本。
PS:Charles 是收費軟件,能夠免費試用 30 天。試用期事後,未付費的用戶仍然能夠繼續使用,可是每次使用時間不能超過 30 分鐘,而且啓動時將會有 10 秒種的延時。所以,該付費方案對廣大用戶仍是至關友好的,即便你長期不付費,也能使用完整的軟件功能。只是當你須要長時間進行封包調試時,會由於 Charles 強制關閉而遇到影響。
(2)安裝方法下載破解版,安裝便可
安裝包地址:https://pan.baidu.com/s/1caploU
破解補丁地址:https://pan.baidu.com/s/1hrRpzda
(1)按照步驟下載安裝第一個安裝包;
(2)將破解補丁包粘貼到charles的lib文件下,而後將原來的命名爲charles的文件替換掉 便可
1.1.2 charles與手機/電腦的鏈接
1.1.2.1 charles與手機端的鏈接
使手機和電腦在一個局域網內,不必定非要是一個ip段,只要是同一個路由器下就能夠了。
(1)首先利用cmd -config命令查看本身電腦的ip地址
(2)而後在手機端的wifi代理設置那裏去進行相關的配置設置。
這裏的代理服務器地址填寫爲電腦的ip地址,而後端口這裏寫8888(這個是charles的默認設置),若是本身修改了就寫成本身所修改的端口就能夠了。
配置完成,會看到一個charles與手機端的鏈接提示彈窗,選擇allo便可。
(3)手機端抓包https
上述一、2步驟,只針對http請求。因爲https協議的特殊性,因此要求電腦端和手機端都須要安裝下證書,不然會看到返回的數據都是亂碼。
a.電腦端證書下載
b. 手機端證書下載
在設備上打開這個網址 http://www.charlesproxy.com/getssl 安裝 Charles SSL 證書。
注意,同一個手機對應不一樣電腦上的Charles都要分別下載證書進行認證,由於手機的證書是和電腦端的Charles一一配對的。
PS:ios手機,須要信任該證書
C.相關配置
選擇Proxy | Proxy Settings,彈出proxy設置選項卡,勾選Enable SSL Proxying,在Location部份選擇add,按以下圖添加,抓取任意站點、443端口的數據。
1.1.2.2 charles與電腦端的鏈接
因爲charles會自動配置瀏覽器和工具的代理設置,因此說打開工具直接就已是抓包狀態了。直接打開網頁就能夠了。
注意:
(1)Charles支持抓去http、https協議的請求,不支持socket。
(網絡上的兩個程序經過一個雙向的通訊鏈接實現數據的交換,這個鏈接的一端稱爲一個socket)
(2)防火牆關掉
1.1.2.3 過濾請求
一般狀況下,咱們須要對網絡請求進行過濾,只監控向指定目錄服務器上發送的請求。對於這種需求,如下幾種辦法:
方法一:在主界面的中部的Filter欄中填入須要過濾出來的關鍵字。例如咱們的服務器的地址是:www.baidu.com,那麼只須要在 Filter 欄中填入www.baidu.com便可。
方法二:在Charles的菜單欄選擇 「Proxy」->」Recording Settings」,而後選擇 Include 欄,選擇添加一個項目,而後填入須要監控的協議,主機地址,端口號。這樣就能夠只截取目標網站的封包了。以下圖所示:
一般狀況下,咱們使用方法一作一些臨時性的封包過濾,使用方法二作一些常常性的封包過濾。
方法三:在想過濾的網絡請求上右擊,選擇「Focus」,以後在 Filter 一欄勾選上 Focussed 一項,以下圖所示:
這種方式能夠臨時性的,快速地過濾出一些沒有經過關鍵字的一類網絡請求。
1.2.charle的主界面介紹
1.2.1 界面簡介
啓動後,頁面展現以下:
1.2.2 顯示模式
Charles有兩種顯示模式,stucture 和sequence。支持來回切換。
(1) Structure形式以下圖 優勢:能夠很清晰的看到請求的數據結構,並且是以域名劃分請求信息的,能夠很清晰的去分析和處理數據。
(2)Sequence形式以下圖 優勢:能夠看到所有請求,這裏的結果以數據請求的順序來顯示,最新的請求顯示在最下面
綜上,兩種形式各有千秋,structure 適合對單一系列的訪問請求從宏觀上進行把握,能夠快速定位。sequence 適合精肯定位內容,由於每條sequence 都有size,status等屬性信息,方便快速定位這條結果的價值.
對於我本身來講,更傾向於Charles的第一種樹狀視圖,比fiddler的列表視圖好的地方在於:屢次刷新後的請求會被概括到樹裏面,更加一目瞭然,用fiddler的時候,有點強迫症的同窗,都要點擊clear,有木有…
1.2.3 工具條簡介
⑴~⑷ session
Charles有個會話(session,不是指http中的session)的概念,能夠理解爲瀏覽器中的tab,這個功能在須要調試多個站點頁面時很實用,當你刷新頁面的時候,只會在當前session中捕獲請求。
(PS:ctrl+N建立個新的session,ctrl+W關閉當前session)
⑸垃圾桶———功能是clear,清理掉全部請求顯示信息。
⑹搜索關鍵字(望遠鏡的那個)———功能是搜索關鍵字,也可使用ctrl+f實現,能夠設置搜索的範圍。
⑺中止監控
———功能是領抓去的數據顯示或者不顯示的設置。 這個本人認爲是charles工具很方便的一個,通常都使其爲不顯示抓取狀態,只有當本身測試的時候的先後,在令其爲抓取並顯示狀態。這樣能夠快準狠的獲取到相關本身想要的信息,而沒必要在一堆數據請求中去尋找。
⑻開啓/中止網速模擬
測試時,會用到網速模擬,具體的在後面功能部分介紹,此處略.....
⑼開啓中止斷點功能
⑽刷新單個請求
⑾編輯請求
編輯修改功能,能夠對下圖中的請求信息進行修改,修改完畢後點擊Execute就能夠發送一個修改後的請求數據包。
⑿校驗請求的結果
⒀工具
⒁設置
1.2.4 右鍵請求菜單
右鍵請求出現菜單,Charles的右鍵菜單功能比fiddler強大太多了。
1.2.5 請求詳情
請求詳情跟fiddler類似,但直觀很多:
1.2.5.1 overview—請求總覽
(1)URL(統一資源定位符)
https:協議方案名
M.xxx.baidu.com:服務器地址,這裏是DNS可解析的名稱。同事也能夠是ipv4d地址名,還能夠是[0:0:0:0:0:0:0:1]這樣用方括號括起來的IPV6地址名。
App/getindexPage:帶層次的文件路徑。指定服務器上的文件路徑來定位特指的資源。
URL——請求url的路徑、文件和查詢字符串
Status——狀態是否已完成
Notes——備註
Response Code——響應狀態碼
Protocol——該seesion使用的協議(Http/https/ftp)
SSLssl——協議版本號
Method——該seesion使用的方法(get/post/put等)
Content-Type——響應的content-type頭
Timing :
Request Start Time——接收到的第一個請求的第一個字節的時間點
Request End Time——發送到客戶端的最後一個響應的最後一個字節的時間
Response Start Time——響應開始時間
Response End Time——響應結束時間
Duration——整個請求—響應持續時間
DNS——全部選中的session解析DNS所花費的時間的總和
Connect——全部選中session創建TCP/IP鏈接所花費的時間總和
Request——請求耗費時間
Response——響應耗費時間
Size
Request Header——請求頭大小
Response Header——響應頭大小
Request
Response
Total——請求頭+響應頭字節大小
1.2.5.2 request—請求頭
名詞解釋:
(1)Appid : 在COM中,安全控制的最小單位是進程,每一個進程都有對應的安全控制策略。進程的安全控制策略保存在註冊表中,存儲位置爲:HKCR\AppID\訪問權限、啓動權限等安全配置信息。開發COM組件時,能夠在COM組件對應的CLSID子鍵下
新建字符串類型的項,名稱:AppID,值:該COM組件所在進程的AppID值。
channel:渠道包來源
Contextuuid:設備惟一標識
1.2.5.3 response—請求結果
Json格式,具體含義參考接口文檔。(其中raw是原始數據包的狀態)
1.2.5.4 summary—請求詳情,包含加載時間等
1.2.5.5 時間線圖表
1.3 經常使用的功能
1.3.1 模擬網速功能
在線上環境一般有些由於網速慢致使的bug,在本機沒法重現,那時候就很抓瞎,若是嫌遠程麻煩,推薦使用throttle。
支持對Bandwidth(帶寬)、Utilistation(利用百分比)、Round-trip(往返延遲)、MTU(字節)進行配置,而且支持3G/4G或者其餘網絡模式。
!若是咱們只想模擬指定網站的慢速網絡,能夠再勾選上圖中的「Only for selected hosts」項,而後在對話框的下半部分設置中增長指定的 hosts 項便可。
ADSL:屬於DSL技術的一種,全稱Asymmetric Digital Subscriber Line( 非對稱數字用戶線路),亦可稱做非對稱數字用戶環路。是一種新的數據傳輸方式。
VDSL:是一種非對稱DSL技術,全稱Very High Speed Digital Subscriber Line (超高速數字用戶線路)。和ADSL技術同樣,VDSL也使用雙絞線進行語音和數據的傳輸。VDSL是利用現有電話線上安裝VDSL,只需在用戶側安裝一臺VDSL modem。最重要的是,無須爲寬帶上網而從新佈設或變更線路。
Isdn:綜合業務數字網(Integrated Services Digital Network,ISDN)是一個數字電話網絡國際標準,是一種典型的電路交換網絡系統。在ITU的建議中,ISDN是一種在數字電話網IDN的基礎上發展起來的通訊網絡,ISDN可以支持多種業務,包括電話業務和非電話業務。
1.3.2修改網絡請求內容
Charles能夠方便地提供網絡請求的修改和重發功能。這也能夠解決咱們,爲了修改謀其格請求,或者反覆嘗試不一樣參數的網絡請求的需求。方法是:只須要在以往的網絡請求上點擊右鍵,選擇 「Edit」/點擊鉛筆圖標,便可建立一個可編輯的網絡請求。以下所示:
咱們能夠修改該請求的任何信息,包括URL地址、端口、參數等,以後點擊 「Execute」 便可發送該修改後的網絡請求(以下圖所示)。Charles 支持咱們屢次修改和發送該請求。
1.3.3 重複發送網絡請求
(1)Repeat:此功能此功能對於測試同窗特別有用,能夠檢驗接口的健壯性。對於前端的價值是不須要刷新頁面,只須要repeat請求,好比檢驗代理是否成功,修改請求後執行等。使用方法:選擇請求後,右擊Repeat就是重複發送一次請求。
(2)Advanced Repeat能夠自定義重複次數和重複間隔,重複發送屢次請求。能夠來簡單地測試服務器的併發處理能力,方法以下:咱們在想打壓的網絡請求上(POST或 GET 請求都可)右擊,而後選擇 「Repeat Advanced」菜單項。而後在彈出的對話框中,選擇打壓的併發線程數以及打壓次數,肯定以後,便可開始打壓。(iteration:迭代次數,Concurrency:併發數,repeat爲時間間隔)。
1.3.4 修改服務器返回內容
有些時候咱們想讓服務器返回一些指定的內容,方便咱們調試一些特殊狀況。例如列表頁面爲空的狀況,數據異常的狀況,部分耗時的網絡請求超時的狀況等。若是沒有Charles,要服務器配合構造相應的數據顯得會比較麻煩。這個時候,使用 Charles 相關的功能就能夠知足咱們的需求。
根據具體的需求,Charles提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,均可以達到修改服務器返回內容的目的。這三者在功能上的差別是:
△Map功能適合長期地將某一些請求重定向到另外一個網絡地址或本地文件。
△Rewrite功能適合對網絡請求進行一些正則替換。
△Breakpoints功能適合作一些臨時性的修改。
1.3.4.1 MAL
在Charles的菜單中,選擇 「Tools」->」Map Remote」 或 「Map Local」 便可進入到相應功能的設置頁面。
(1)map remote
對於Map Remote功能,咱們須要分別填寫網絡重定向的源地址和目的地址,對於不須要限制的條件,能夠留空。
(2)map local
對於Map Local功能,咱們須要填寫的重定向的源地址和本地的目標文件。對於有一些複雜的網絡請求結果,咱們能夠先使用 Charles 提供的 「Save Response…」 功能,將請求結果保存到本地(以下圖所示),而後稍加修改,成爲咱們的目標映射文件。
方法是:
1.請求右鍵—save response,而後另存在本身電腦的某個位置(文件屬性必須爲.txt)
2.請求右鍵/tools—MAPlocal,而後添加你剛纔保存的文件,點擊OK保存
3.右鍵請求,選擇repeat
4.從新刷新app的頁面,會看到數據已經修改過來了。
5.去掉代理配置:取消勾選Tools—Maplocal便可
1.3.4.2 Rewrite
Map Local在使用的時候,有一個潛在的問題,就是其返回的 Http Response Header 與正常的請求並不同。這個時候若是客戶端校驗了 Http Response Header 中的部份內容,就會使得該功能失效。解決辦法是同時使用 Map Local 如下面提到的 Rewrite 功能,將相關的 Http 頭 Rewrite 成咱們但願的內容。
Rewrite功能功能適合對某一類網絡請求進行一些正則替換,以達到修改結果的目的。
例如:咱們的客戶端有一個API請求是得到用戶暱稱,而我當前的暱稱是 「XXXX」。咱們想試着直接修改網絡返回值,將「XXXX」替換成「測試測試下」。
步驟是:
1.選中請求,而後在Tools—右鍵選擇rewrite功能;
2.在彈出的提示彈窗中,選擇add-rules
3.完成設置以後,右鍵請求,選擇 repeat。而後咱們就能夠從 Charles 中看到,以後的 API 得到的暱稱被自動 Rewrite 成了 測試測試下,以下圖所示:
1.3.5 斷點功能(Breakpoints)
上面提供的Rewrite功能最適合作批量和長期的替換,可是不少時候,咱們只是想臨時修改一次網絡請求結果,這個時候,使用 Rewrite 功能雖然也能夠達到目的,可是過於麻煩,對於臨時性的修改,咱們最好使用 Breakpoints 功能。
Breakpoints,當指定的網絡請求發生時,Charles 會截獲該請求,這個時候,咱們能夠在 Charles 中臨時修改網絡請求的返回內容。
Charles可以斷到發送請求前(篡改Request)和請求後(篡改Response)。
使用斷點修改請求的弊端是,若是開發設置了請求超時時間,那麼修改的速度慢了每每即便返回了也沒有效果,因此實際測試中使用此方法的場景並很少。
這裏以將個人券金額修改成13.00元爲例:
(1) 針對接口右鍵選擇"BreakPoints",這樣這個接口就被加入到斷點狀態了;
(2)須要進一步修改斷點的屬性,能夠在菜單欄"Proxy"–>"Breakpoints Settings"裏進行添加刪除或者修改,而且能夠選擇這個斷點是在request仍是response,仍是二者都要。這裏只是修改response
(3)刷新app界面,跳轉到斷點模版,這個時候你能夠在對應狀態狀況下修改request或者response,而後點擊下方按鈕「Execute」。點開Edit Response界面,選擇JSON格式,格式清晰,方便修改,直接在上面進行數據修改,改爲你想要測試的數據,而後點擊執行按鈕
(4)再次刷新app界面,而後app返回的是新改的數據,根據返回數據測試客戶端顯示是否正確
1.3.6 查看鏈接本機charles代理的ip
這裏能夠看到鏈接本身charles代理的IP,針對某些不須要的/未知用戶,點擊remove便可
1.3.7 設置請求的黑名單
不想某些請求發起,直接返回404,能夠用黑名單。選擇Tools-Blacklist,設置以下圖:
小禮物走一走,來簡書關注我