Golang设置代理的3种实现方式及动态轮换技巧
proxyURL, _ := url.Parse("http://proxy.example.com:8080") transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL)
} client := &http.Client{Transport: transport}
type ProxySelector struct {
proxies []*url.URL
mu sync.RWMutex
}
func (p ProxySelector) Next() url.URL {
p.mu.RLock()
defer p.mu.RUnlock()
return p.proxies[rand.Intn(len(p.proxies))]
}
// 在Transport中动态切换 transport := &http.Transport{
Proxy: func(req *http.Request) (*url.URL, error) {
return proxySelector.Next(), nil
}
}