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/")

Utilisez github.com/gocolly/colly/v2 et son paquet proxy dans la fonction de l'application, en conservant la gestion normale des erreurs. Configurez le sélecteur avant le démarrage des requêtes ou des visites asynchrones. La liste de proxys HTTP fournit des candidats publics pour les entrées d'endpoint du commutateur.

SetProxy choisit un endpoint fixe ; SetProxyFunc laisse le transport HTTP choisir à chaque requête. Cela évite de remplacer la configuration partagée dans chaque rappel OnRequest.

Dans cette implémentation, SetProxyFunc met aussi DisableKeepAlives à true. Il met à jour un *http.Transport existant, mais remplace un autre type de transport par un nouveau transport HTTP. Préservez délibérément tout comportement personnalisé de RoundTripper au lieu de supposer qu'il survivra.

Collector.Clone partage le backend HTTP, donc changer le proxy d'un clone peut modifier ce backend partagé. Fixez la propriété avant tout travail concurrent. La sélection en round-robin fait tourner les endpoints fournis, pas les identités de sortie publiques vérifiées ni une disponibilité contrôlée indépendamment.

Articles similaires