http传输代理功能

时间:2016-08-28 11:14:55

标签: go

鉴于我想为每个请求使用不同的代理,我执行了以下操作:

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次请求被打印一次,那么每次请求都不应打印出来吗?

在我看来,第一次调用该函数的结果被缓存并且只调用一次,但我可能错了,有什么想法吗?

1 个答案:

答案 0 :(得分:2)

来自net/http package documentation

  

默认情况下,Transport会缓存连接以供将来重复使用。访问许多主机时,这可能会留下许多开放的连接。可以使用Transport的CloseIdleConnections方法和MaxIdleConnsPerHost和DisableKeepAlives字段来管理此行为。

     

应该重复使用运输,而不是根据需要创建。运输对于多个goroutine并发使用是安全的。