주어진 Go 코드에는 요청을 www.google.com으로 리디렉션하도록 역방향 프록시가 설정되어 있습니다. 역방향 프록시가 올바르게 작동하는 동안 다음과 같은 질문이 생깁니다. 프록시된 요청의 응답 본문에 어떻게 액세스할 수 있습니까?
이 문제에 대한 해결책은 ReverseProxy 유형을 제공하는 httputil 패키지에 있습니다. 최신 버전의 패키지에서 ReverseProxy는 백엔드에서 오는 응답을 사용자 정의하고 검사할 수 있는 선택적 ModifyResponse 기능을 제공합니다.
구체적으로 이 기능을 구현하면 개발자는 전달하기 전에 *http.Response를 수정할 수 있습니다. 클라이언트에게요. ModifyResponse의 잠재적인 사용 사례 중 하나는 응답 본문을 읽고 조작하는 것입니다.
이를 설명하려면 다음 수정된 코드를 고려하세요.
package main import ( "bytes" "fmt" "io/ioutil" "net/http" "net/http/httputil" "net/url" ) func main() { target := &url.URL{Scheme: "http", Host: "www.google.com"} proxy := httputil.NewSingleHostReverseProxy(target) proxy.ModifyResponse = func(resp *http.Response) (err error) { b, err := ioutil.ReadAll(resp.Body) // Read the HTML response body if err != nil { return err } resp.Body.Close() // The body is closed by the ReadAll function, but it's good practice to close it again b = bytes.Replace(b, []byte("server"), []byte("schmerver"), -1) // Modify the HTML response by replacing "server" with "schmerver" newBody := ioutil.NopCloser(bytes.NewReader(b)) resp.Body = newBody resp.ContentLength = int64(len(b)) resp.Header.Set("Content-Length", strconv.Itoa(len(b))) fmt.Println(resp) // Print the modified response for debugging purposes return nil } http.Handle("/google", proxy) http.ListenAndServe(":8099", nil) }
이 코드에서 ModifyResponse 함수는 다음을 읽도록 정의됩니다. HTML 응답 본문을 수정하고 특정 문자열을 바꿔서 수정한 다음 수정된 본문을 응답 본문으로 설정합니다. "/google" URL 경로를 처리하면 www.google.com에 대한 요청이 프록시 처리되고 수정된 응답이 클라이언트로 다시 전송됩니다.
위 내용은 Go에서 역방향 프록시의 응답 본문을 검사하고 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!