בחירת פרוקסי סבבית ב-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 מאפשר ל-transport של HTTP לבחור בכל בקשה. כך נמנעת החלפת התצורה המשותפת בתוך כל callback של OnRequest.
ביישום הזה, SetProxyFunc גם מגדיר את DisableKeepAlives לערך true. הוא מעדכן *http.Transport קיים, אך מחליף סוג transport אחר ב-transport HTTP חדש. שמרו בכוונה על כל התנהגות RoundTripper מותאמת אישית במקום להניח שהיא תשרוד.
Collector.Clone חולק את ה-backend של HTTP, ולכן שינוי הפרוקסי של שיבוט יכול לשנות את ה-backend המשותף הזה. הכריעו בעלות לפני עבודה במקביל. בחירה סבבית מסובבת את ה-endpoints שסופקו, לא זהויות יציאה ציבוריות מאומתות או זמינות שנבדקה באופן עצמאי.