第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Chrome DevTools 協(xié)議 - 在 Golang 中使用 gzip 主體的

Chrome DevTools 協(xié)議 - 在 Golang 中使用 gzip 主體的

Go
qq_笑_17 2023-04-24 15:56:33
我一直在研究一個(gè) golang 腳本,它使用chrome devtools 協(xié)議來:1)攔截一個(gè)請(qǐng)求2)抓取攔截請(qǐng)求的響應(yīng)體3)對(duì)html文檔進(jìn)行一些修改4)繼續(xù)攔截的請(qǐng)求該腳本適用于 HTML 文檔,除非Content-Encoding設(shè)置為gzip. 分步過程如下所示”1)攔截請(qǐng)求 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)改變響應(yīng)體在這里,我對(duì) HTML 標(biāo)記做了一些小改動(dòng)procesHtml()(但該功能的代碼與此問題無關(guān),因此不會(huì)在此處發(fā)布)。我還從請(qǐng)求中獲取標(biāo)頭,并在必要時(shí)更新content-length和date繼續(xù)響應(yīng)。然后,我在調(diào)用時(shí)對(duì)主體進(jìn)行 gzip 壓縮r := gZipCompress([]byte(alteredBody),它返回一個(gè)字符串。然后將該字符串連接到標(biāo)頭,這樣我就可以制作rawResponse.func AlterDocument(debuggerResponse []byte, headers map[string]string) (string, error) {    alteredBody, err := processHtml(debuggerResponse)    if err != nil {        return "", err    }
查看完整描述

1 回答

?
Helenr

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超4個(gè)贊

我最終使用了一個(gè)不同的庫(kù)來更好、更有效地處理更大的響應(yīng)。

現(xiàn)在,DevTools 協(xié)議似乎在解壓之后返回響應(yīng)主體,但在調(diào)用Network.GetResponseBodyForInterception.?這當(dāng)然只是一個(gè)假設(shè),該假設(shè)基于這樣一個(gè)事實(shí),即調(diào)用時(shí)Network.GetResponseBodyForInterception獲得的響應(yīng)主體未壓縮(盡管它可能是 base64 編碼的)。此外,該方法被標(biāo)記為實(shí)驗(yàn)性的,文檔中沒有提及任何關(guān)于壓縮響應(yīng)的內(nèi)容?;谠摷僭O(shè),我將進(jìn)一步假設(shè),當(dāng)我們從Network.GetResponseBodyForInterception自己壓縮身體已經(jīng)來不及了。我確認(rèn)我正在使用的庫(kù)不會(huì)壓縮或解壓縮 gzipped 響應(yīng)。

我可以繼續(xù)使用我的代碼,而無需擔(dān)心 gzip 壓縮響應(yīng),因?yàn)槲铱梢院翢o問題地更改正文。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 1 回答
  • 0 關(guān)注
  • 322 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)