> 백엔드 개발 > Golang > Go의 역방향 프록시에서 응답 본문에 어떻게 액세스할 수 있나요?

Go의 역방향 프록시에서 응답 본문에 어떻게 액세스할 수 있나요?

Patricia Arquette
풀어 주다: 2024-11-19 16:39:02
원래의
611명이 탐색했습니다.

How can I access the response body in Go's reverse proxy?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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