繁体   English   中英

如何获取http重定向状态代码

[英]How to get the http redirect status codes

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM