为了账号安全,请及时绑定邮箱和手机立即绑定

重定向初始请求时如何在杜松子酒中记录响应主体

重定向初始请求时如何在杜松子酒中记录响应主体

Go
牛魔王的故事 2023-04-04 14:50:51
我正在尝试记录已重定向的请求的响应正文。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标头。这是重定向的预期行为。如果您想尝试捕获要重定向到的页面的主体,您实际上不能为此使用重定向(最终请求中不涉及重定向处理程序);您必须完全代理请求而不是重定向它。代理与重定向有很大不同,因此请确保这确实是您所追求的行为。



查看完整回答
反对 回复 2023-04-04
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信