collector := colly.NewCollector()
switcher, err := proxy.RoundRobinProxySwitcher(
    "http://proxy-a.example:8080",
    "http://proxy-b.example:8080",
)
if err != nil {
    return err
}
collector.SetProxyFunc(switcher)
err = collector.Visit("https://www.example.com/")

在应用的函数中使用 github.com/gocolly/colly/v2 及其 proxy 包,并保留常规的错误处理。请在请求或异步访问开始之前配置选择器。HTTP 代理列表为切换器的 endpoint 输入提供公开候选。

SetProxy 选择固定的 endpoint;SetProxyFunc 让 HTTP transport 按每个请求进行选择。这样可避免在每个 OnRequest 回调内部替换共享配置。

在此实现中,SetProxyFunc 还会把 DisableKeepAlives 设为 true。它会更新已有的 *http.Transport,但会用新的 HTTP transport 替换其他类型的 transport。请有意保留任何自定义 RoundTripper 行为,而不要假定它仍然有效。

Collector.Clone 共享 HTTP backend,因此修改克隆的代理可能改变该共享 backend。在并发工作之前请确定归属。轮询选择轮换的是所提供的 endpoint,而不是经过验证的公开出口身份或独立检查的可用性。

相关文章