如何在Go 的反向代理中訪問Response Body
在Go 中,httputil/reverseproxy 套件提供了一種便捷的方式來實現反向代理伺服器。然而,存取底層 HTTP 請求的回應正文可能具有挑戰性。
原始程式碼
給定的 Go 程式碼示範了一個簡單的反向代理伺服器:
package main import ( "net/http" "net/http/httputil" "net/url" ) func main() { target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
存取回應正文
存取回應body,您可以利用httputil/reverseproxy套件提供的ModifyResponse函數。此函數可讓您在將 HTTP 回應傳送到客戶端之前對其進行修改。
透過實作 ModifyResponse函數,您可以對回應執行各種操作,包括:
範例
以下是如何修改回應正文的範例:func rewriteBody(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) // Read html if err != nil { return err } err = resp.Body.Close() if err != nil { return err } b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // replace html 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 } target, _ := url.Parse("http://example.com") proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = rewriteBody
以上是如何存取 Go 的反向代理中的回應正文?的詳細內容。更多資訊請關注PHP中文網其他相關文章!