我正在尝试记录已重定向的请求的响应正文。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 关注
- 70 浏览
添加回答
举报
0/150
提交
取消