在網(wǎng)絡(luò)調(diào)試中,能抓到包只是第一步。
當(dāng)問題指向客戶端行為異常、狀態(tài)分支不符合預(yù)期,或者需要驗(yàn)證條件時(shí),只看請求和響應(yīng)已經(jīng)不夠了。
這類場景需要在數(shù)據(jù)返回給 App 之前,主動(dòng)改掉它。
不是所有抓包方式都能改響應(yīng)
在動(dòng)手之前,需要先知道一個(gè)條件,只有代理模式,才具備修改請求和響應(yīng)的能力。
原因是代理工具位于客戶端與服務(wù)器之間,請求和響應(yīng)在這里以明文形式經(jīng)過,才有機(jī)會被攔截和替換
設(shè)備直接抓包、數(shù)據(jù)流抓包,只負(fù)責(zé)采集和展示數(shù)據(jù),不參與轉(zhuǎn)發(fā),自然也無法修改。
從代理抓包開始修改
如果目標(biāo)是改響應(yīng),第一步必須讓流量經(jīng)過代理。
基本準(zhǔn)備流程
- 在電腦上啟動(dòng)代理抓包工具
- 確認(rèn)代理端口正在監(jiān)聽
- 設(shè)備與電腦處于同一網(wǎng)絡(luò)
- 在設(shè)備側(cè)配置代理地址與端口
- 在設(shè)備上安裝并信任代理證書
完成后,可以先用瀏覽器訪問 HTTPS 頁面,確認(rèn)代理生效。
確認(rèn)目標(biāo) App 的流量進(jìn)入代理
接下來是一個(gè)關(guān)鍵驗(yàn)證步驟:
- 在代理工具中觀察 Safari 請求
- 再觸發(fā) App 中的業(yè)務(wù)操作
如果 App 的請求能出現(xiàn)在代理列表中,說明這條路徑成立,可以繼續(xù)。
如果沒有任何請求出現(xiàn),需要先解決流量是否經(jīng)過代理的問題,而不是直接寫腳本。
為什么要用腳本,而不是手工改包
在調(diào)試中,手工改包存在幾個(gè)限制:
- 只能修改一次
- 不適合重復(fù)請求
- 容易引入操作誤差
自定義腳本的價(jià)值在于:
- 對特定 URL 自動(dòng)生效
- 每次請求行為一致
- 便于反復(fù)驗(yàn)證客戶端邏輯
這也是代理工具支持腳本能力的原因。
在抓包大師中啟用攔截器
在抓包大師(Sniff Master)的 HTTPS 代理抓包模式 下,可以使用內(nèi)置攔截器來修改請求或響應(yīng)。
操作方式是:
- 進(jìn)入 HTTPS 代理抓包界面
- 在右側(cè)找到攔截器入口(插件圖標(biāo))
- 打開攔截器日志窗口
- 確認(rèn)攔截功能處于開啟狀態(tài)
只有在代理模式中,這個(gè)入口才會存在。
編輯攔截器腳本
在攔截器界面中,可以進(jìn)入腳本編輯區(qū)域。
腳本由固定結(jié)構(gòu)組成:
handleRequest(request)handleResponse(response)filterUrl()
函數(shù)名和參數(shù)不能修改,只能調(diào)整內(nèi)部邏輯。

通過 URL 規(guī)則控制攔截范圍
在開始修改響應(yīng)之前,先限制作用范圍。
例如,只攔截某個(gè)接口:
function filterUrl() {
return ["https://api.example.com/v1/*"]
}
這樣可以避免誤修改其他請求,便于觀察效果。
修改響應(yīng)內(nèi)容的具體方式
在 handleResponse 中,可以直接操作返回?cái)?shù)據(jù)。
例如,將接口返回的狀態(tài)字段強(qiáng)制改為成功:
function handleResponse(response) {
if (!response.IsBase64Body) {
let body = JSON.parse(response.Body)
body.code = 0
body.message = "ok"
response.Body = JSON.stringify(body)
}
return response
}
保存后,腳本立即生效。
驗(yàn)證修改是否真正生效
驗(yàn)證方式不依賴主觀判斷,而是觀察結(jié)果:
- App 是否進(jìn)入原本不會進(jìn)入的邏輯分支
- UI 是否出現(xiàn)不同的展示狀態(tài)
- 是否觸發(fā)了新的接口請求
如果行為發(fā)生變化,說明響應(yīng)已經(jīng)在代理層被替換。
與其他工具的配合方式
在實(shí)際調(diào)試中,自定義腳本往往不是單獨(dú)使用的。
常見組合包括:
- 代理工具 + 攔截器:修改響應(yīng)驗(yàn)證邏輯
- 抓包工具:確認(rèn)請求參數(shù)是否符合預(yù)期
- 日志工具:對比客戶端內(nèi)部狀態(tài)變化
腳本負(fù)責(zé)修改數(shù)據(jù),其他工具負(fù)責(zé)觀察結(jié)果。
腳本失效時(shí)的排查方向
當(dāng)修改沒有生效時(shí),可以按順序檢查:
- 當(dāng)前是否處于代理模式
- 目標(biāo)請求是否命中
filterUrl - 響應(yīng)體是否為 Base64 編碼
- App 是否存在本地緩存邏輯
每一步都可以通過抓包結(jié)果直接驗(yàn)證。
自定義腳本修改響應(yīng)是為了:
- 驗(yàn)證客戶端對異常數(shù)據(jù)的處理
- 模擬后端未就緒的接口
- 快速復(fù)現(xiàn)邊界條件