我想记录301s vs 302s,但看不到在Client.Do,Get,doFollowingRedirects,CheckRedirect中读取响应状态代码的方法.我是否必须自己实现重定向才能实现这一目标?
Jam*_*dge 11
该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
}
Run Code Online (Sandbox Code Playgroud)
(如果你只支持链接到默认传输,你可以简化一点).
然后,您可以使用此传输创建客户端,并且应记录任何重定向:
client := &http.Client{Transport: LogRedirects{}}
Run Code Online (Sandbox Code Playgroud)
以下是您可以试验的完整示例:http://play.golang.org/p/8uf8Cn31HC
归档时间: |
|
查看次数: |
4006 次 |
最近记录: |