我正在嘗試記錄已重定向的請求的響應正文。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()) } }不幸的是,身體的反應總是空洞的。也許是重定向或中間件擾亂了我的身體反應當我嘗試郵遞員時,我可以看到身體反應來了!您可以在https://jsonplaceholder.typicode.com/posts上通過 POST 嘗試。它應該在正文響應中返回一個帶有 id 的有效負載我在這里做錯了什么?提前致謝
1 回答

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