Цикличен избор на прокси в Colly със SetProxyFunc
Използвайте SetProxyFunc за цикличен избор, като имате предвид ефектите върху keep-alive, подмяната на transport и клонирания backend.
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-и, а не проверени публични изходни идентичности или независимо проверена наличност.