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 מאפשר ל-transport של HTTP לבחור בכל בקשה. כך נמנעת החלפת התצורה המשותפת בתוך כל callback של OnRequest.

ביישום הזה, SetProxyFunc גם מגדיר את DisableKeepAlives לערך true. הוא מעדכן *http.Transport קיים, אך מחליף סוג transport אחר ב-transport HTTP חדש. שמרו בכוונה על כל התנהגות RoundTripper מותאמת אישית במקום להניח שהיא תשרוד.

Collector.Clone חולק את ה-backend של HTTP, ולכן שינוי הפרוקסי של שיבוט יכול לשנות את ה-backend המשותף הזה. הכריעו בעלות לפני עבודה במקביל. בחירה סבבית מסובבת את ה-endpoints שסופקו, לא זהויות יציאה ציבוריות מאומתות או זמינות שנבדקה באופן עצמאי.

מאמרים קשורים