Что нужно сделать для того, чтобы на стороннем сервере не заблокировали, если я оттуда граблю данные?
Есть некий известный сайт, который не предоставляет публичного API, но его фронт делает раз в несколько секунд ajax запросы к серверу, поддерживая таким образом актуальность данных.
В заголовках ничего связанного с CORS нет, поэтому можно просто cURL'oм делать запросы к этому серверу и получать нужные данные.
Но мне очень сильно кажется, что если я запущу на своем сервере приложение, которое будет круглосуточно делать определенное количество запросов, то IP моего сервера забанят, и я останусь ни с чем.
Вопрос: что можно сделать для того, чтобы избежать блокировки в будущем?
Мои мысли по этому поводу:
1. Собрать массив с 50 (например) разных User-Agent's и при каждом запросе подставлять в заголовок некий случайный элемент из массива. Таким образом будет проще "затеряться в толпе".
2. Купить пул IP адресов, и случайным образом делать запросы через них. Насколько я понимаю, для решения подобных задач придумали Proxy-сервера.
Если я куплю пакет IP-шников, например тут ( proxywhite.com ) что мне с ними делать дальше? Интересует именно техническая сторона вопроса?
Есть ли какие-то готовые решения для привязки пула IP к веб-серверу работающему на NodeJS?
Сергей, Ну, не отслеживать было бы тупо. Они отслеживают и блокируют при большом количестве запросов на определенное время. Скорее всего, автоматически, а не вручную, но все же.
Первым делом я бы протестировал на другом сервере, а действительно ли будет забанен ip при большом кол-ве запросов. Такое встречается не так уж и часто.
Подмена user-agent вряд ли поможет.
Остается два варианта - или ограничить частоту запросов (Например 1 в секунду) или через прокси.
Как вариант сделать так - имеем массив с прокси и или достаем информацию через них подключаясь к ним по очереди, или достаем информацию асинхронно, где каждый запрос на отдельном прокси имеет паузу в пару секунд.
На том удаленном сервере интересная система. Если я делаю много запросов за раз - банят где-то на пару часов, поэтому в моем случае самый годный вариант - это (как Вы и написали) делать каждый запрос через рандомный Прокси-IP.
Касательно паузы и асинхронности - проблемно, потому что нужны данные в режиме реального времени. Задержки в пару секунд - это уже много.
1) помимо заголовка user-agent, ваша "цель" так-же может определять ботов по другим параметрам (включенный flash, js, web-rtc и т.д.). Воспользуйтесь сниффером, чтобы узнать какие данные "тянет" сайт с клиента
2) Вы мыслете в правильную сторону. Не думаю что в вашем случае, обязательно пользоваться платными прокси - публично-доступных будет достаточно
Спасибо за адекватный ответ.
Купил несколько дней назад пару десятков IP-шников у платного провайдера прокси, пока полет нормальный, отпишусь сюда где-то через месяц, поделюсь результатами.