> 백엔드 개발 > Golang > Go Reverse Proxy에서 응답 본문에 액세스하는 방법은 무엇입니까?

Go Reverse Proxy에서 응답 본문에 액세스하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-08 08:20:02
원래의
988명이 탐색했습니다.

How to Access the Response Body in a Go Reverse Proxy?

역방향 프록시에서 응답 본문 액세스

역방향 프록시로 작업할 때 백엔드에서 받은 응답 본문에 액세스해야 할 수도 있습니다. 섬기는 사람. 이 기사에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿