在調(diào)試網(wǎng)絡問題時,有一個明顯的分界點:
- 只查看請求和響應
- 主動修改請求和響應,觀察程序行為變化
當調(diào)試目標落在第二種情況,抓包工具是否支持請求 / 響應攔截器,就成了決定效率的關鍵因素。
確認攔截位置,是在發(fā)送前,還是返回后
在動手寫攔截邏輯之前,我會先確認一個我要干預的是請求階段,還是響應階段。
舉兩個常見的調(diào)試目標:
- 請求發(fā)出前,替換 Header、參數(shù)或 URL
- 響應返回后,修改字段、狀態(tài)碼或數(shù)據(jù)結(jié)構(gòu)
這一步會直接決定攔截器是否需要同時處理 request 和 response。
代理型工具中的攔截能力
在 Charles、Fiddler 這類代理工具中,攔截通常以規(guī)則或斷點形式存在。
以代理斷點為例:
- 設置 URL 匹配規(guī)則
- 請求命中后暫停
- 手動修改請求內(nèi)容再繼續(xù)發(fā)送
這種方式適合臨時驗證接口行為,但當需要批量、可復現(xiàn)的修改邏輯時,手動斷點的效率會迅速下降。
腳本化攔截的必要性
當調(diào)試需求變成:
- 每次請求都要自動改 Header
- 特定接口返回值需要統(tǒng)一替換
- 多個字段需要條件判斷后再修改
就需要使用腳本型攔截器。
這類攔截器有幾個明確特征:
- 請求與響應自動進入攔截邏輯
- 修改過程可重復
- 行為可通過日志驗證
在抓包大師中啟用請求 / 響應攔截器
在需要對 iOS App 網(wǎng)絡數(shù)據(jù)做深度調(diào)試時,我會使用 抓包大師(Sniff Master) 的攔截器功能。
打開攔截器日志界面
- 進入代理抓包界面
- 雙擊右側(cè)插件形狀的攔截器圖標
- 打開攔截器日志窗口
在這個界面中,可以直接看到:
- 攔截功能是否啟用
- 當前攔截日志是否產(chǎn)生
日志是否出現(xiàn),是判斷攔截是否生效的直接依據(jù)。
進入攔截器編輯器,理解代碼結(jié)構(gòu)
在攔截器日志界面中,點擊「編輯攔截器」,會進入代碼編輯窗口。
攔截器使用 JavaScript 編寫,整體結(jié)構(gòu)固定,由三個函數(shù)組成:
function handleRequest(request) {
return request
}
function handleResponse(response) {
return response
}
function filterUrl() {
return []
}
這段代碼本身不會攔截任何請求,它的作用是提供一個完整但空行為的框架。
攔截范圍由 filterUrl 決定
filterUrl() 返回的是一個 URL 規(guī)則數(shù)組。
例如:
function filterUrl() {
return ["https://api.example.com/*"]
}
只有命中該規(guī)則的請求,才會進入 handleRequest 和 handleResponse。
如果這里返回空數(shù)組,攔截器不會對任何請求生效。
在請求階段修改數(shù)據(jù)
handleRequest(request) 接收到的是即將發(fā)送給服務器的數(shù)據(jù)。
request 對象中可直接訪問:
request.URLrequest.Headerrequest.Bodyrequest.IsBase64Body
例如,替換請求 Header 中的某個字段:
function handleRequest(request) {
request.Header["token"] = "debug-token"
return request
}
修改完成后返回 request,對服務器而言,這就是最終收到的請求。
在響應階段修改返回結(jié)果
handleResponse(response) 接收的是服務器返回的數(shù)據(jù)。
response 中除了 URL、Header、Body,還包含:
response.StatusCode
例如,修改響應內(nèi)容以驗證客戶端邏輯:
function handleResponse(response) {
response.Body = '{"code":0,"data":"mock"}'
return response
}
客戶端接收到的就是被替換后的響應內(nèi)容。
攔截器是否生效,用日志驗證
在調(diào)試過程中,我會在攔截函數(shù)中加入日志輸出:
console.log("攔截請求:" + request.URL);
如果日志窗口中出現(xiàn)對應輸出,說明:
- URL 匹配成功
- 攔截邏輯被執(zhí)行
- 修改行為真實生效
這是比“界面有沒有變化”更可靠的判斷方式。
多工具協(xié)同的使用方式
在實際工程中,攔截器很少單獨使用:
- 用 Wireshark 判斷是否建立連接
- 用代理工具確認請求路徑
- 用 抓包大師(Sniff Master)攔截并修改數(shù)據(jù)
每個工具解決的都是不同層級的問題,攔截器負責的是數(shù)據(jù)層面的驗證和控制