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를 돌릴 뿐, 검증된 공개 출구 식별자나 독립적으로 확인된 가용성을 돌리는 것이 아닙니다.