So verwenden Sie http.request.body in Golang wieder

藏色散人
Freigeben: 2020-10-20 13:58:11
nach vorne
2859 Leute haben es durchsucht

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))
Nach dem Login kopieren

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.
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage