Настройка прокси-ротации для парсера 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка прокси-ротации для парсера 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка прокси-ротации для парсера 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. Логирование статистики по прокси.