我正在嘗試記錄已重定向的請(qǐng)求的響應(yīng)正文。func main() { r := gin.Default() eanAPI := api.NewEanAPI() v1 := r.Group("/v1") v1.POST("/*action", eanAPI.Redirect, middleware.SaveRequest()) port := os.Getenv("PORT") if len(port) == 0 { port = "8000" } r.Run(":" + port)}func (api *eanAPI) Redirect(ctx *gin.Context) { forwardToHost := "https://jsonplaceholder.typicode.com" url := ctx.Request.URL.String() ctx.Redirect(http.StatusTemporaryRedirect, forwardToHost)}type bodyLogWriter struct { gin.ResponseWriter body *bytes.Buffer}func (w bodyLogWriter) Write(b []byte) (int, error) { w.body.Write(b) return w.ResponseWriter.Write(b)}func SaveRequest() gin.HandlerFunc { return func(c *gin.Context) { c.Next() blw := &bodyLogWriter{body: bytes.NewBufferString(""), ResponseWriter: c.Writer} c.Writer = blw c.Next() statusCode := c.Writer.Status() fmt.Println("status: ", statusCode) if statusCode <= 400 { //ok this is an request with error, let's make a record for it // now print body (or log in your preferred way) fmt.Println("Response body: " + blw.body.String()) } }不幸的是,身體的反應(yīng)總是空洞的。也許是重定向或中間件擾亂了我的身體反應(yīng)當(dāng)我嘗試郵遞員時(shí),我可以看到身體反應(yīng)來(lái)了!您可以在https://jsonplaceholder.typicode.com/posts上通過(guò) POST 嘗試。它應(yīng)該在正文響應(yīng)中返回一個(gè)帶有 id 的有效負(fù)載我在這里做錯(cuò)了什么?提前致謝
1 回答

慕工程0101907
TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
您在瀏覽器/郵遞員中看到的響應(yīng)正文來(lái)自您被重定向到的頁(yè)面。執(zhí)行實(shí)際重定向的頁(yè)面可能沒(méi)有響應(yīng)主體,只有狀態(tài)和Location
標(biāo)頭。這是重定向的預(yù)期行為。如果您想嘗試捕獲要重定向到的頁(yè)面的主體,您實(shí)際上不能為此使用重定向(最終請(qǐng)求中不涉及重定向處理程序);您必須完全代理請(qǐng)求而不是重定向它。代理與重定向有很大不同,因此請(qǐng)確保這確實(shí)是您所追求的行為。
- 1 回答
- 0 關(guān)注
- 91 瀏覽
添加回答
舉報(bào)
0/150
提交
取消