鉴于我想为每个请求使用不同的代理,我执行了以下操作:
var proxies chan *url.URL
var anonymousClient = &http.Client{Transport: &http.Transport{Proxy: func(r *http.Request) (*url.URL, error) {
fmt.Println("Called")
p := <-proxies
proxies <- p
return p, nil
}}}
如果我使用上述客户端Called
发出10次请求被打印一次,那么每次请求都不应打印出来吗?
在我看来,第一次调用该函数的结果被缓存并且只调用一次,但我可能错了,有什么想法吗?
答案 0 :(得分:2)
来自net/http package documentation:
默认情况下,Transport会缓存连接以供将来重复使用。访问许多主机时,这可能会留下许多开放的连接。可以使用Transport的CloseIdleConnections方法和MaxIdleConnsPerHost和DisableKeepAlives字段来管理此行为。
应该重复使用运输,而不是根据需要创建。运输对于多个goroutine并发使用是安全的。