Seleção round-robin de proxy no Colly com SetProxyFunc
Use SetProxyFunc para a seleção round-robin, tendo em conta os efeitos sobre keep-alive, a substituição do transport e o backend clonado.
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/")Use github.com/gocolly/colly/v2 e o seu pacote proxy na função da aplicação, mantendo o tratamento normal de erros. Configure o seletor antes de começarem os pedidos ou as visitas assíncronas. A lista de proxies HTTP fornece candidatos públicos para as entradas de endpoint do comutador.
SetProxy escolhe um endpoint fixo; SetProxyFunc permite que o transport HTTP escolha por pedido. Assim evita-se substituir a configuração partilhada dentro de cada callback OnRequest.
Nesta implementação, SetProxyFunc também define DisableKeepAlives como true. Atualiza um *http.Transport existente, mas substitui outro tipo de transport por um transport HTTP novo. Preserve deliberadamente qualquer comportamento personalizado de RoundTripper em vez de assumir que sobrevive.
Collector.Clone partilha o backend HTTP, pelo que alterar o proxy de um clone pode alterar esse backend partilhado. Determine a propriedade antes do trabalho concorrente. A seleção round-robin roda os endpoints fornecidos, não identidades de saída públicas verificadas nem disponibilidade verificada de forma independente.