【问题标题】:How to get the http redirect status codes如何获取 http 重定向状态码
【发布时间】:2020-12-15 01:48:42
【问题描述】:

我想记录 301 和 302,但在 Client.Do、Get、doFollowingRedirects、CheckRedirect 中看不到读取响应状态代码的方法。我是否必须自己实现重定向才能实现这一点?

【问题讨论】:

  • 你试过 Response.StatusCode 吗?
  • @rvignacio Golang http.Client 会自动进行重定向,所以我得到的只是最终状态码 200。

标签: http redirect go


【解决方案1】:

http.Client 类型允许您指定自定义传输,它应该允许您做您想做的事情。应该执行以下操作:

type LogRedirects struct {
    Transport http.RoundTripper
}

func (l LogRedirects) RoundTrip(req *http.Request) (resp *http.Response, err error) {
    t := l.Transport
    if t == nil {
        t = http.DefaultTransport
    }
    resp, err = t.RoundTrip(req)
    if err != nil {
        return
    }
    switch resp.StatusCode {
    case http.StatusMovedPermanently, http.StatusFound, http.StatusSeeOther, http.StatusTemporaryRedirect:
        log.Println("Request for", req.URL, "redirected with status", resp.StatusCode)
    }
    return
}

(如果您只支持链接到默认传输,则可以稍微简化一下)。

然后您可以使用此传输创建客户端,并且应记录所有重定向:

client := &http.Client{Transport: LogRedirects{}}

这是一个完整的示例,您可以尝试:http://play.golang.org/p/8uf8Cn31HC

【讨论】:

  • 要获得更多信息日志消息,您可能还需要使用http.StatusText() 来包含状态代码的人类友好名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
  • 1970-01-01
  • 2012-01-09
  • 2012-01-30
  • 1970-01-01
  • 2011-02-26
相关资源
最近更新 更多