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!
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!