Go의 역방향 프록시에서 응답 본문에 액세스하는 방법
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!