首頁 > 後端開發 > Golang > 如何在 HTTPutil 反向代理中存取和修改回應正文?

如何在 HTTPutil 反向代理中存取和修改回應正文?

Barbara Streisand
發布: 2024-11-12 14:49:02
原創
945 人瀏覽過

How to Access and Modify Response Body in an HTTPutil Reverse Proxy?

使用 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板