SetProxyFunc による Colly のラウンドロビン型プロキシ選択
ラウンドロビン選択には 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 であり、検証済みの 公開出口 ID や独立に確認された可用性ではありません。