Heim >Backend-Entwicklung >Golang >So verwenden Sie http.request.body in Golang wieder

So verwenden Sie http.request.body in Golang wieder

藏色散人
藏色散人nach vorne
2020-10-20 13:58:112922Durchsuche

Die folgende Kolumne stellt Ihnen das Golang-Tutorial vor, wie man http.request.body in Golang wiederverwendet. Ich hoffe, es wird Freunden helfen, die es brauchen!

So verwenden Sie http.request.body in Golang wieder

Probleme und Szenarien

Es gibt Szenarien, in denen http.request.body im Unternehmen verteilt werden muss. Beispielsweise kann in WeChat-Rückrufnachrichten nur eine Adresse angegeben werden, daher wird erwartet, dass eine Kopie der Nachricht an andere Dienste gesendet werden kann. Dienst B und Dienst A, der WeChat-Rückrufe empfängt, verarbeiten die WeChat-Rückrufinformationen gemeinsam.

In diesem Artikel werden die relevanten Inhalte der Golang-Wiederverwendung von http.request.body ausführlich vorgestellt und für alle zum Nachschlagen und Studieren freigegeben. Ich werde im Folgenden nicht viel sagen, werfen wir einen Blick auf die detaillierte Einführung

Lösung Ideen

Die erste Überlegung besteht darin, http.request direkt weiterzuleiten. Verwenden Sie ReverseProxy, um http.request direkt von Dienst A an Dienst B weiterzuleiten. Allerdings bringt WeChat Probleme wie die Verifizierung mit sich und es ist sehr mühsam, es vollständig anzupassen. Also änderte ich meine Meinung und plante, den Inhalt von http.request.body direkt an Dienst B zu senden.

Aber http.request ist readcloser. Wenn wir alle http.request lesen, können wir die Informationen in http.request nicht erneut lesen.

Wie kopiere ich http.request.body?

wobei c den http-Kontext darstellt

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

1 Wir lesen zuerst den Text aus http.request und speichern ihn in einer Variablen.

2. Schreiben Sie dann die Daten in der Variablen mit der Methode ioutil.NopCloser zurück nach 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 umschließt Reader r mit einer No-Op-Close-Methode und gibt eine ReadCloser-Schnittstelle zurück.

Damit wir c.request erneut zur Verarbeitung nutzen können.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie http.request.body in Golang wieder. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen