Selección round-robin de proxy en Colly con SetProxyFunc
Use SetProxyFunc para la selección round-robin, teniendo en cuenta los efectos sobre keep-alive, la sustitución del transporte y el 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 y su paquete proxy en la función de la aplicación, manteniendo el manejo normal de errores. Configure el selector antes de que empiecen las peticiones o las visitas asíncronas. La lista de proxies HTTP aporta candidatos públicos para las entradas de endpoint del conmutador.
SetProxy elige un endpoint fijo; SetProxyFunc permite que el transporte HTTP elija por petición. Así se evita sustituir la configuración compartida dentro de cada callback OnRequest.
En esta implementación, SetProxyFunc también pone DisableKeepAlives en true. Actualiza un *http.Transport existente, pero sustituye otro tipo de transporte por un transporte HTTP nuevo. Preserve deliberadamente cualquier comportamiento personalizado de RoundTripper en lugar de suponer que sobrevive.
Collector.Clone comparte el backend HTTP, así que cambiar el proxy de un clon puede cambiar ese backend compartido. Determine la propiedad antes del trabajo concurrente. La selección round-robin rota los endpoints suministrados, no identidades de salida públicas verificadas ni disponibilidad comprobada de forma independiente.