Home  >  Article  >  Backend Development  >  How to reuse http.request.body in golang

How to reuse http.request.body in golang

藏色散人
藏色散人forward
2020-10-20 13:58:112798browse

The following column golang tutorial will introduce you to an example of the method of reusing http.request.body in golang. I hope it will be helpful to friends in need!

How to reuse http.request.body in golang

Problems and Scenarios

There is a need to distribute http.request.body in the business Scenes. For example, WeChat callback messages can only specify one address, so it is expected that a copy of the message can be sent to other services. Service B and Service A, which receives WeChat callbacks, process the WeChat callback information together.

This article will introduce in detail the relevant content of golang's reuse of http.request.body, and share it for everyone's reference and study. I won't say much below, let's take a look at the detailed introduction

Solution

The first consideration is to forward http.request directly. Use ReverseProxy to directly forward http.request from service A to service B. However, WeChat involves issues such as verification, and it is very troublesome to fully adjust it. So I changed my mind and planned to post the content of http.request.body directly to service B.

But http.request is readcloser. When we readAll http.request, we cannot read the information in http.request again.

How can I copy and use http.request.body?

where c represents the context of 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. We first read the body from http.request and save it to a variable .

2. Then use the ioutil.NopCloser method to write the data in the variable back to 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 wraps Reader r with a no-operation Close method and returns a ReadCloser interface.

So we can use c.request again for processing.

The above is the detailed content of How to reuse http.request.body in golang. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:jb51.net. If there is any infringement, please contact admin@php.cn delete