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

如何获取http重定向状态代码,http,redirect,go,Http,Redirect,Go,我想记录301s和302s,但看不到读取客户端中响应状态代码的方法。Do、Get、DoFollowerRedirects、CheckRedirect。要实现这一点,我必须自己实现重定向吗?该类型允许您指定一个自定义传输,它应该允许您执行所需的操作。类似于以下的操作应该可以做到: type LogRedirects struct { Transport http.RoundTripper } func (l LogRedirects) RoundTrip(req *http.Reques

我想记录301s和302s,但看不到读取客户端中响应状态代码的方法。Do、Get、DoFollowerRedirects、CheckRedirect。要实现这一点,我必须自己实现重定向吗?

该类型允许您指定一个自定义传输,它应该允许您执行所需的操作。类似于以下的操作应该可以做到:

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{}}

下面是一个您可以尝试的完整示例:

您是否尝试过Response.StatusCode?@rvignacio Golang http。客户端会自动执行重定向,因此只会给出最终的状态代码200。有关更多信息性日志消息,您可能还希望使用以包含状态代码的人性化名称。