역방향 프록시에서 응답 본문 액세스
역방향 프록시로 작업할 때 백엔드에서 받은 응답 본문에 액세스해야 할 수도 있습니다. 섬기는 사람. 이 기사에서는 httputil 패키지를 사용하여 Go에서 응답 본문을 검색하는 방법을 자세히 설명합니다.
제공된 코드 조각에는 요청을 Google로 전달하는 간단한 역방향 프록시가 있습니다.
target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) http.Handle("/google", proxy) http.ListenAndServe(":8099", nil)
응답 본문에 액세스하는 열쇠는 ReverseProxy 유형의 ModifyResponse 필드에 있습니다. 공식 문서에 따르면, ModifyResponse는 백엔드에서 응답을 수정할 수 있는 선택적 기능입니다.
다음은 클라이언트에 응답 본문을 보내기 전에 응답 본문을 읽고 수정하는 예입니다.
import ( "bytes" "fmt" "io/ioutil" ) 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 } func main() { target, _ := url.Parse("http://example.com") proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = rewriteBody http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
이 코드에서 rewriteBody 함수는 응답 본문을 읽고 수정한 다음(이 경우 "server"라는 단어를 "schmerver"로 바꿈) 설정합니다. 수정된 본문을 새로운 응답 본문으로 사용하세요.
위 내용은 Go Reverse Proxy에서 응답 본문에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!