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 paquete proxy na función da aplicación, mantendo o tratamento normal de erros. Configure o selector antes de que comezas as peticións ou as visitas asíncronas. A lista de proxies HTTP fornece candidatos públicos para as entradas de endpoint do conmutador.

SetProxy escolle un endpoint fixo; SetProxyFunc permite que o transporte HTTP escolla por petición. Así evítase substituír a configuración compartida dentro de cada callback OnRequest.

Nesta implementación, SetProxyFunc tamén pon DisableKeepAlives en true. Actualiza un *http.Transport existente, pero substitúe outro tipo de transporte por un transporte HTTP novo. Preserve deliberadamente calquera comportamento personalizado de RoundTripper en vez de supoñer que sobrevivirá.

Collector.Clone comparte o backend HTTP, así que cambiar o proxy dun clon pode cambiar ese backend compartido. Determine a propiedade antes do traballo concorrente. A selección round-robin rota os endpoints fornecidos, non identidades de saída públicas verificadas nin dispoñibilidade comprobada de forma independente.

Artigos relacionados