>  기사  >  백엔드 개발  >  golang에서 http.request.body를 재사용하는 방법

golang에서 http.request.body를 재사용하는 방법

藏色散人
藏色散人앞으로
2020-10-20 13:58:112795검색

다음 칼럼에서는 golang에서 http.request.body를 재사용하는 방법에 대한 golang 튜토리얼 예제를 소개하겠습니다. 필요한 친구들에게 도움이 되길 바랍니다!

golang에서 http.request.body를 재사용하는 방법

문제 및 시나리오

http.request.body를 비즈니스에 배포해야 하는 시나리오가 있습니다. 예를 들어 WeChat 콜백 메시지는 하나의 주소만 지정할 수 있으므로 메시지 사본이 다른 서비스로 전송될 수 있습니다. 위챗 콜백을 받는 서비스 B와 서비스 A는 위챗 콜백 정보를 함께 처리한다.

이 기사에서는 http.request.body를 재사용하는 golang의 관련 내용을 자세히 소개하고 모든 사람의 참고와 학습을 위해 공유할 것입니다. 아래에서는 많은 말을 하지 않겠습니다. 자세한 소개를 살펴보겠습니다

해결책 ideas

초기 고려 사항은 http.request를 직접 전달하는 것입니다. ReverseProxy를 사용하여 http.request를 서비스 A에서 서비스 B로 직접 전달합니다. 그러나 WeChat에는 검증과 같은 문제가 포함되어 있으며 이를 완전히 조정하는 것은 매우 번거로운 작업입니다. 그래서 마음을 바꿔 http.request.body의 내용을 B서비스에 직접 게시하기로 했습니다.

하지만 http.request는 더 가까이 읽혀집니다. http.request를 모두 읽으면 http.request의 정보를 다시 읽을 수 없습니다.

http.request.body를 복사하는 방법은 무엇입니까?

여기서 c는 http 컨텍스트

 // 把request的内容读取出来
 var bodyBytes []byte
 if c.Request.Body != nil {
  bodyBytes, _ = ioutil.ReadAll(c.Request.Body)
 }
 // 把刚刚读出来的再写进去
 c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))

1을 나타냅니다. 먼저 http.request에서 본문을 읽고 이를 변수에 저장합니다.

2. 그런 다음 ioutil.NopCloser 메서드를 사용하여 변수의 데이터를 다시 http.request에 씁니다.

https://golang.org/pkg/io/ioutil/#NopCloser
NopCloser returns a ReadCloser with a no-op Close method wrapping the provided Reader r.

NopCloser는 Reader r을 무작동 Close 메서드로 래핑하고 ReadCloser 인터페이스를 반환합니다.

따라서 c.request를 다시 사용하여 처리할 수 있습니다.

위 내용은 golang에서 http.request.body를 재사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제