לאחר 200–300 בקשות מכתובת IP אחת, המקור מתחיל להחזיר 429 Too Many Requests או קפטצ'ה. זוהי הגנה סטנדרטית: Cloudflare, DataDome, PerimeterX — כולם עוקבים אחר תדירות הבקשות לפי IP. הדרך היחידה לעקוף הגבלת קצב בפרסום תעשייתי היא רוטציית פרוקסי. בואו נפרק את שילוב מאגר הפרוקסי בפרסר של Bitrix. אנו מקימים מערכת כזו במפתח מלא: מבחירת מאגר ועד סוכן בדיקת תקינות. לפי Cloudflare, כ-30% מכלל תעבורת האינטרנט נוצרת על ידי בוטים, וההגנה מפניהם רק הולכת ומחמירה. מדריך זה מכסה הגדרת פרוקסי לפרסר Bitrix חזק.
סוגי פרוקסי ומה לבחור
| סוג פרוקסי | עלות | מהירות | זיהוי | המלצה |
|---|---|---|---|---|
| Datacenter | $1–3/IP | גבוהה | קל לפי ASN | מקורות ללא הגנה רצינית |
| Residential | $5–15/GB תעבורה | בינונית | כמעט אפס | Cloudflare Enterprise, אנטי-בוטים |
| Mobile | $10–30/GB | נמוכה | לא מזוהה | הגנה אגרסיבית, לעיתים רחוקות לקטלוגים |
פרוקסי Datacenter זולים פי 10 מפרוקסי Residential אך יש להם סיכוי כפול להיחסם. עבור רוב משימות אכלוס הקטלוגים ב-Bitrix, מאגר של 20–50 פרוקסי Datacenter מספיק. Residential — אם המקור חוסם באופן פעיל. עלות ההתקנה נעה בדרך כלל בין $200 ל-$500 עבור אינטגרציית רוטציית פרוקסי בסיסית, עם עלויות חודשיות למאגר פרוקסי החל מ-$50 עבור 20 פרוקסי Datacenter.
איך פועלת רוטציית פרוקסי
רוטציה פירושה שינוי ה-IP לפני כל בקשה או לאחר N בקשות. פרסר ב-Bitrix משתמש בדרך כלל ב-\Bitrix\Main\Web\HttpClient או ב-cURL ישירות. הפרוקסי מוגדר דרך אפשרויות חיבור. המשימה היא לבחור את הפרוקסי הבא מהמאגר לפני כל בקשה. אנו מיישמים מחלקת ProxyRotator עם תמיכה ב-cooldown לפרוקסי חסומים.
אחסון המאגר — טבלה או קובץ תצורה:
// /local/php_interface/parser/proxy_pool.php return [ ['host' => '185.1.2.3', 'port' => 8080, 'user' => 'u1', 'pass' => 'p1', 'type' => 'http'], ['host' => '185.1.2.4', 'port' => 8080, 'user' => 'u2', 'pass' => 'p2', 'type' => 'socks5'], // ... ]; מחלקת Rotator:
class ProxyRotator { private array $pool; private array $failed = []; private int $index = 0; public function next(): ?array { $attempts = count($this->pool); while ($attempts-- > 0) { $proxy = $this->pool[$this->index % count($this->pool)]; $this->index++; $key = $proxy['host'] . ':' . $proxy['port']; if (!isset($this->failed[$key]) || $this->failed[$key] < time()) { return $proxy; } } return null; // все прокси в cooldown } public function markFailed(array $proxy, int $cooldownSec = 300): void { $key = $proxy['host'] . ':' . $proxy['port']; $this->failed[$key] = time() + $cooldownSec; } } אסטרטגיות רוטציה:
| אסטרטגיה | תיאור | הכי מתאימה ל |
|---|---|---|
| Round-robin | פרוקסי בשימוש לפי סדר | מאגר הומוגני, רוטציה פשוטה |
| Random | בחירה אקראית | זיהוי תבניות אנטי-בוט |
| Sticky per source | פרוקסי אחד לכל דומיין למשך N דקות | הפחתת שיעור החסימות ב-80% |
לפרסור קטלוגים, אנו ממליצים על sticky per source עם רוטציה כל 50–100 בקשות או בעת קבלת 429/403.
למה Sticky per Source עדיף על Round-robin
Sticky per source מחקה התנהגות משתמש אמיתית: IP אחד לכל אתר. זה מפחית את תדירות החסימות פי 3–4 בהשוואה ל-round-robin. בפרויקטים שלנו, רוטציית פרוקסי מפחיתה שיעורי חסימה בעד 80% בהשוואה לפרסור עם IP יחיד. עם זאת, אם למקור יש מספר דומיינים, sticky per source דורש פרוקסי נפרד לכל דומיין.
אינטגרציה עם Bitrix HttpClient
$proxy = $rotator->next(); $http = new \Bitrix\Main\Web\HttpClient(); $http->setProxy($proxy['host'], $proxy['port'], $proxy['user'], $proxy['pass']); $http->setTimeout(15); $http->setStreamTimeout(30); $response = $http->get($url); if ($http->getStatus() === 429 || $http->getStatus() === 403) { $rotator->markFailed($proxy, 600); // retry с другим прокси } בשימוש ב-cURL ישירות — אפשרויות // /local/php_interface/parser/proxy_pool.php return [ ['host' => '185.1.2.3', 'port' => 8080, 'user' => 'u1', 'pass' => 'p1', 'type' => 'http'], ['host' => '185.1.2.4', 'port' => 8080, 'user' => 'u2', 'pass' => 'p2', 'type' => 'socks5'], // ... ]; , class ProxyRotator { private array $pool; private array $failed = []; private int $index = 0; public function next(): ?array { $attempts = count($this->pool); while ($attempts-- > 0) { $proxy = $this->pool[$this->index % count($this->pool)]; $this->index++; $key = $proxy['host'] . ':' . $proxy['port']; if (!isset($this->failed[$key]) || $this->failed[$key] < time()) { return $proxy; } } return null; // все прокси в cooldown } public function markFailed(array $proxy, int $cooldownSec = 300): void { $key = $proxy['host'] . ':' . $proxy['port']; $this->failed[$key] = time() + $cooldownSec; } } , $proxy = $rotator->next(); $http = new \Bitrix\Main\Web\HttpClient(); $http->setProxy($proxy['host'], $proxy['port'], $proxy['user'], $proxy['pass']); $http->setTimeout(15); $http->setStreamTimeout(30); $response = $http->get($url); if ($http->getStatus() === 429 || $http->getStatus() === 403) { $rotator->markFailed($proxy, 600); // retry с другим прокси } (CURLPROXY_HTTP או CURLPROXY_SOCKS5).
העיקרון הוא אוניברסלי וניתן להתאמה לכל פלטפורמת PHP, מה שמבטיח אינטגרציה חלקה של הפרסר עם רוטציית פרוקסי.
ניטור תקינות המאגר
פרוקסי מתים — פג תוקף, IP נחסם, ספק מתנתק. יש צורך בבדיקת תקינות קבועה. סוכן רץ פעם בשעה, עובר על המאגר ובודק כל פרוקסי עם בקשה ל-CURLOPT_PROXY. התוצאה — עדכון סטטוס בתצורה (פעיל/מת). פרוקסי מתים מוסרים אוטומטית מהרוטציה.
רשום סטטיסטיקות לכל פרוקסי: מספר בקשות מוצלחות, מספר 429/403, זמן תגובה ממוצע. זה מאפשר לזהות פרוקסי "איטיים" ולהסיר אותם לפני מוות מלא.
מה לעשות כשפרוקסי נחסם
אם פרוקסי מקבל 429 או 403, ה-CURLOPT_PROXYUSERPWD שלנו מכניס אותו ל-cooldown למשך 5–10 דקות. אבל זה לא מספיק. בנוסף, יש ליישם exponential backoff: לאחר כל שגיאה, הגדל את זמן ההמתנה לאותו IP. כמו כן, שימושי רשימה שחורה של פרוקסי שנחסמו לצמיתות — יש להסיר אותם מהמאגר ולהחליף אותם בחדשים.
אמצעים נוספים
- השהיה בין בקשות — הפסקה אקראית של 1–5 שניות. גם עם רוטציית פרוקסי, תדירות מקלעת נראית חשודה.
- רוטציית User-Agent — מאגר של 10–20 מחרוזות UA עדכניות, מוחלפות יחד עם הפרוקסי.
- Referer וכותרים — שלח
CURLOPT_PROXYTYPE,https://httpbin.org/ip,ProxyRotatorמהעמוד הקודם. בלעדיהם, הבקשה נראית כמו בוט.
תוצרים
- בחירה ורכישה של מאגר הפרוקסי (datacenter או residential).
- כתיבת קובץ תצורה או טבלה לאחסון רשימת הפרוקסי.
- יישום מחלקת
Accept-Languageעם אסטרטגיית הרוטציה הנבחרת. - אינטגרציה עם
Accept-Encodingאו cURL בפרסר. - כתיבת סוכן בדיקת התקינות ורישום סטטיסטיקות.
- תיעוד התהליך לצוות שלך.
- גישה לפאנל ניהול מאגר הפרוקסי.
- הדרכה לצוות שלך (שעה).
- תמיכה שוטפת למשך חודש לאחר ההשקה.
עם ניסיון של 5+ שנים בפיתוח Bitrix, 50+ פרויקטי פרסור, ו-5 שנים בשוק, אנו מבטיחים פעולה יציבה של הפרסר גם נגד אנטי-בוטים אגרסיביים. צור קשר להערכה מקדימה של המשימה שלך. הזמן התקנת פרסור במפתח מלא — נכין פתרון אישי.







