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, но другой тип transport заменяет новым HTTP transport. Сохраняйте любое нестандартное поведение RoundTripper осознанно, а не предполагайте, что оно выживет.

Collector.Clone разделяет HTTP backend, поэтому смена прокси у клона может изменить этот общий backend. Определите владение до параллельной работы. Круговой выбор чередует переданные endpoint-ы, а не проверенные публичные выходные идентичности или независимо проверенную доступность.

Похожие статьи