gpt4 book ai didi

go - 重定向初始请求时如何在 Gin 中记录响应主体

转载 作者:IT王子 更新时间:2023-10-29 01:56:49 26 4
gpt4 key购买 nike

我正在尝试记录已重定向的请求的响应正文。

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())
}
}

不幸的是, body react 总是空的。也许是重定向或中间件干扰了我的 body react

当我尝试 postman 时,我可以看到 body react 来了!您可以在 https://jsonplaceholder.typicode.com/posts 上通过 POST 尝试.它应该在正文响应中返回一个带有 id 的有效载荷

我在这里做错了什么?

提前致谢

最佳答案

您在浏览器/ postman 中看到的响应主体来自您被重定向到的页面。执行实际重定向的页面可能没有响应主体,只有状态和 Location header 。这是重定向的预期行为。如果您想 try catch 要重定向到的页面的主体,您实际上不能为此使用重定向(最终请求中不涉及重定向处理程序);您必须完全代理请求而不是重定向它。代理与重定向有很大不同,因此请确保这确实是您所追求的行为。

关于go - 重定向初始请求时如何在 Gin 中记录响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52333118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com