亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Chrome DevTools 協議 - 在 Golang 中使用 gzip 主體的

Chrome DevTools 協議 - 在 Golang 中使用 gzip 主體的

Go
qq_笑_17 2023-04-24 15:56:33
我一直在研究一個 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 壓縮響應,因為我可以毫無問題地更改正文。


查看完整回答
反對 回復 2023-04-24
  • 1 回答
  • 0 關注
  • 306 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號