Налаштування проксі-ротації для парсера 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування проксі-ротації для парсера 1С-Бітрікс
Проста
~1 робочий день
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування прокси-ротації для парсера 1С-Бітрікс

Після 200-300 запитів з одного IP джерело починає відправляти 429 Too Many Requests або капчу. Це стандартний захист: Cloudflare, DataDome, PerimeterX — всі відстежують частоту запитів по IP. Єдиний спосіб обійти rate-limiting при промисловому парсингу — ротація прокси. Розберемо інтеграцію пула прокси в парсер на Бітрікс.

Типи прокси та що вибрати

  • Датацентрові (DC) — дешеві ($1-3/IP), швидкі, але легко визначаються по ASN. Підходять для джерел без серйозного захисту.
  • Резидентні — IP реальних провайдерів, коштують $5-15/GB трафіку. Не визначаються як прокси. Потрібні для джерел з Cloudflare Enterprise.
  • Мобільні — IP мобільних операторів. Найбільш «чисті», але найбільш дорогі та повільні.

Для більшості задач автонаповнення каталогу у Бітрікс достатньо пула з 20-50 датацентрових прокси. Резидентні — якщо джерело активно блокує.

Архітектура ротації

Парсер у Бітрікс звичайно використовує \Bitrix\Main\Web\HttpClient або 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;
    }
}

Стратегії ротації:

  • Round-robin — найпростіша, прокси використовуються по черзі. Працює при однорідному пулі.
  • Random — випадковий вибір. Знижує передбачуваність паттерну для anti-bot систем.
  • Sticky per source — один прокси закріплюється за одним доменом-джерелом на N хвилин. Імітує реального користувача, знижує ймовірність блокування.

Для парсингу каталогів рекомендую sticky per source з ротацією кожні 50-100 запитів або при отримані 429/403.

Інтеграція з 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 напрямку — опції CURLOPT_PROXY, CURLOPT_PROXYUSERPWD, CURLOPT_PROXYTYPE (CURLPROXY_HTTP або CURLPROXY_SOCKS5).

Мониторинг здоров'я пула

Прокси умирають — істікає термін, IP попадає в бан, провайдер відключає. Потрібен регулярний health-check. Агент, що запускається раз на годину, проходить по пулу та перевіряє кожен прокси запитом до https://httpbin.org/ip. Результат — оновлення статусу в конфігурації (active/dead). Мертві прокси автоматично виключаються з ротації.

Логуйте статистику по кожному прокси: кількість успішних запитів, кількість 429/403, середній час ответу. Це дозволяє виявити «повільні» прокси та виключити їх до повної смерті.

Додаткові заходи

  • Затримка між запитами — 1-5 секунд рандомної паузи. Навіть з ротацією прокси, пулемётна частота запитів виглядає підозріло.
  • Ротація User-Agent — пул із 10-20 актуальних рядків UA, переключається разом з прокси.
  • Referer та заголовки — відправляйте Accept-Language, Accept-Encoding, Referer від попередньої сторінки. Без них запит виглядає як бот.

Що налаштовуємо за один день

  1. Файл/таблиця з пулом прокси.
  2. Клас ProxyRotator з round-robin та cooldown для failed.
  3. Інтеграція з HttpClient парсера.
  4. Health-check агент для пула.
  5. Логування статистики по прокси.