使用 HTTPutil 存取反向代理中的回應正文
HTTPutil 在 Go 中提供了強大的反向代理實作。但是,它缺乏存取回應正文的本機功能。本文探討了一種使用 ReverseProxy 結構中的 ModifyResponse 欄位檢索回應正文並修改它的解決方案。
HTTPutil 反向代理概述
在提供的程式碼片段中,使用 httputil.NewSingleHostReverseProxy 建立反向代理。該代理將請求轉發到目標 URL www.google.com。該請求在 /google 端點處理,並在連接埠 8099 上偵聽。
檢索並修改回應正文
要存取和修改回應正文,我們使用 ModifyResponse 欄位。此欄位接受函數,該函數採用 *http.Response 指標作為參數並傳回錯誤。在此函數中,我們可以使用 ioutil.ReadAll 讀取回應正文,關閉現有正文,修改正文內容,並將修改後的正文設定回回應中。以下程式碼示範了這一點:
func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) body := ioutil.NopCloser(bytes.NewReader(b)) resp.Body = body resp.ContentLength = int64(len(b)) resp.Header.Set("Content-Length", strconv.Itoa(len(b))) return nil }
ModifyResponse 字段,我們可以在回應正文發送到客戶端之前對其進行攔截和操作。
以上是如何在 HTTPutil 反向代理中存取和修改回應正文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!