如何在 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) }
访问响应体
要访问响应体,您可以使用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
通过这种方式实现ModifyResponse函数,您可以在响应正文发送到客户端之前修改和读取响应正文。
以上是如何访问 Go 的反向代理中的响应正文?的详细内容。更多信息请关注PHP中文网其他相关文章!