Обход защиты Qrator, Incapsula и CloudFare

На некоторых популярных сайтах устанавливается защита от DDoS, когда при запросе страницы сайта сначала выдаётся промежуточная страница с javascript, которая выполняет проверку на браузер (роботы / парсеры обычно не используют браузер, потому не проходят эту проверку), и, только если проверка пройдена, этот скрипт перенаправляет вас на ту же страницу, только уже с реальным её содержимым.
Скрипт этот выполняет некоторые вычисления, потом устанавливает Cookies, и при следующем запросе этой же страницы передаются эти Cookies, — так сайт определяет, что проверка на браузер успешно выполнена.

Как проверить, проблема в защите сайта от DDoS, или в чём-то другом?

В случае использования подобной защиты (Qrator, Incapsula, CloudFare и т.п.), в коде страницы вместо данных будет одна или несколько ссылок на файлы со скриптами js
 

Как обойти эту защиту при использовании парсера?

Вариант 1

  1. загружаем любую страницу сайта (например, главную) в браузере Internet Explorer
  2. ждём несколько секунд пока отработает скрипт
  3. убеждаемся что на странице прогрузились данные (что произошел редирект после выполнения скрипта)
  4. считываем Cookies из Internet Explorer
  5. выполняем запросы к сайту с использованием этих Cookies (действие Загрузить страницу по ссылке, режим загрузки — WinHTTP)

Вариант 2

Рассмотрим этот вариант на примере сайта leroymerlin.ru с защитой Qrator.
Там страницы разделов грузятся без проблем, а вот для страниц товаров срабатывает защита.

При загрузке страницы товара парсером, мы получаем очень короткий ответ:

В ответе мы видим запуск скрипта: <script src="/__qrator/qauth_utm_v2.js"></script>
Значит, это как раз тот случай, когда надо обходить такую защиту.

  1. читаем иструкцию по обходу подобных защит
  2. ищем список IP этого сайта:
    https://viewdns.info/iphistory/?domain=leroymerlin.ru
  3. берем второй IP адрес из списка (прямой адрес сайта), подставляем его в ссылку на товар вместо адреса сайта, и проверяем ссылку в браузере:
    http://178.248.234.184/product/hozblok-metallicheskiy-2-05x2-57x2-02-sm-84759919/
    ура, страницы отображаются в браузере, — значит, с большой вероятностью мы справимся с обходом блокировки
  4. проверяем загрузку парсером — уже лучше, но получаем ошибку 403:

  5. добавляем заголовки запроса из браузера, проверяем, — всё заработало:
     

    Действие Параметр Значение
    Создать новый экземпляр WinHTTPRequest Сброс Cookies и заголовков запроса да
    Добавить заголовок запроса Заголовок Accept
    Значение text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Использовать для ВСЕХ запросов да
    Добавить заголовок запроса Заголовок Connection
    Значение keep-alive
    Использовать для ВСЕХ запросов да
    Добавить заголовок запроса Заголовок Host
    Значение 178.248.234.184
    Использовать для ВСЕХ запросов да
    Добавить заголовок запроса Заголовок Upgrade-Insecure-Requests
    Значение 1
    Использовать для ВСЕХ запросов да
    Добавить заголовок запроса Заголовок User-Agent
    Значение Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36
    Использовать для ВСЕХ запросов да
    Загрузить страницу по ссылке Способ загрузки WinHTTP
    Кеширование  
    URL  
    Дополнительные опции