我一直在研究一個 golang 腳本,它使用chrome devtools 協議來:1)攔截一個請求2)抓取攔截請求的響應體3)對html文檔進行一些修改4)繼續攔截的請求該腳本適用于 HTML 文檔,除非Content-Encoding設置為gzip. 分步過程如下所示”1)攔截請求 s.Debugger.CallbackEvent("Network.requestIntercepted", func(params godet.Params) { iid := params.String("interceptionId") rtype := params.String("resourceType") reason := responses[rtype] headers := getHeadersString(params["responseHeaders"]) log.Println("[+] Request intercepted for", iid, rtype, params.Map("request")["url"]) if reason != "" { log.Println(" abort with reason", reason) } // Alter HTML in request response if s.Options.AlterDocument && rtype == "Document" && iid != "" { res, err := s.Debugger.GetResponseBodyForInterception(iid) if err != nil { log.Println("[-] Unable to get intercepted response body!") } rawAlteredResponse, err := AlterDocument(res, headers) if err != nil{ log.Println("[-] Unable to alter HTML") } if rawAlteredResponse != "" { log.Println("[+] Sending modified body") err := s.Debugger.ContinueInterceptedRequest(iid, godet.ErrorReason(reason), rawAlteredResponse, "", "", "", nil) if err != nil { fmt.Println("OH NOES AN ERROR!") log.Println(err) } } } else { s.Debugger.ContinueInterceptedRequest(iid, godet.ErrorReason(reason), "", "", "", "", nil) }})2)改變響應體在這里,我對 HTML 標記做了一些小改動procesHtml()(但該功能的代碼與此問題無關,因此不會在此處發布)。我還從請求中獲取標頭,并在必要時更新content-length和date繼續響應。然后,我在調用時對主體進行 gzip 壓縮r := gZipCompress([]byte(alteredBody),它返回一個字符串。然后將該字符串連接到標頭,這樣我就可以制作rawResponse.func AlterDocument(debuggerResponse []byte, headers map[string]string) (string, error) { alteredBody, err := processHtml(debuggerResponse) if err != nil { return "", err }
1 回答

Helenr
TA貢獻1780條經驗 獲得超4個贊
我最終使用了一個不同的庫來更好、更有效地處理更大的響應。
現在,DevTools 協議似乎在解壓之后返回響應主體,但在調用Network.GetResponseBodyForInterception
.?這當然只是一個假設,該假設基于這樣一個事實,即調用時Network.GetResponseBodyForInterception
獲得的響應主體未壓縮(盡管它可能是 base64 編碼的)。此外,該方法被標記為實驗性的,文檔中沒有提及任何關于壓縮響應的內容?;谠摷僭O,我將進一步假設,當我們從Network.GetResponseBodyForInterception
自己壓縮身體已經來不及了。我確認我正在使用的庫不會壓縮或解壓縮 gzipped 響應。
我可以繼續使用我的代碼,而無需擔心 gzip 壓縮響應,因為我可以毫無問題地更改正文。
- 1 回答
- 0 關注
- 306 瀏覽
添加回答
舉報
0/150
提交
取消