Ограничение частоты запросов
Механизм, ограничивающий число запросов от одного клиента или IP за интервал времени; при превышении возвращает ошибки.
Rate limiting - это ограничение сайта на число запросов, которое один клиент может сделать за отведённое время, например 60 запросов в минуту на IP. При превышении сервер отвечает ошибкой (обычно HTTP 429 Too Many Requests) вместо контента, иногда с заголовком Retry-After, который сообщает, сколько ждать.
Сайты используют лимиты, чтобы защитить инфраструктуру от перегрузки и замедлить автоматизированный сбор. Лимит обычно применяется на IP-адрес, на API-ключ или на аккаунт. Для скрапера чаще всего мешает лимит на IP: отправляете слишком быстро с одного IP - его троттлят или временно банят.
Ротация прокси - стандартное решение. Распределяя запросы по большому пулу IP, каждый отдельный IP остаётся значительно ниже порога на IP, поэтому суммарная пропускная способность может быть высокой, но ни один адрес не упирается в лимит. Именно для этого созданы ротационные резидентные прокси.
Одной ротации мало, если паттерн запросов всё равно выглядит роботизированным. Сочетайте ротацию IP с человекоподобным темпом (случайные задержки), реалистичными заголовками и уважением к ответам Retry-After. Долбёж даже с ротацией может включить защиту уровня всего сайта, выходящую за рамки лимитов на IP.
Подсчёт запросов на что-то
Ограничение частоты задаёт потолок того, сколько запросов клиент может сделать за период. Интересно, на что именно сайт ведёт счёт: обычно на адрес, иногда на аккаунт, иногда на отпечаток или куку, а часто на сочетание.
Реализации различаются тем, как именно отказывают. Воспитанный API возвращает 429 с заголовком Retry-After. Обороняющийся сайт может вернуть 403, показать проверку, тихо замедлить ответы или отдать урезанные данные с успешным кодом.
Ваши варианты определяет счётчик. Если он считает на адрес, помогут дополнительные адреса. Если на аккаунт, адреса не дадут ничего, и нужны либо новые аккаунты, либо меньшая скорость. Определить, с чем именно вы столкнулись, и есть вся задача.
Как правильно размазывать нагрузку
На наших продуктах практическое решение почти всегда в большем числе выходов, а не в более хорошем выходе:
Тот же объём, другая форма
Wrong 200 threads on login_c_US_s_1_ttl_15m -> 429
Right 200 threads across 50 session ids -> spread
Also drop the session suffix entirely -> new exit per connection
Static: cycle across the addresses you own and rest each one.- Мы не ограничиваем одновременные соединения. Лимит, в который вы упёрлись, принадлежит цели, и большая параллельность на одном адресе делает только хуже.
- Соблюдайте Retry-After, когда его присылают. На многих площадках игнорирование превращает временный лимит в более долгий.
- Разбрасывайте темп случайно. Идеально ровные интервалы это подпись сами по себе.
- Следите за тихим ограничением: ответами, которые становятся медленнее или скуднее без кода ошибки.
Путаница вокруг лимитов
429 это не бан
Это временный отказ. Замедление обычно возвращает обслуживание, упорные повторы обычно нет.
Адреса получше не поднимают лимиты
Мобильный за $5.76 в сутки считается так же, как датацентровый за $1.15, когда счётчик ведётся на адрес.
Лимиты на аккаунт игнорируют ваши прокси
Если счётчик на аккаунте, ротация адресов не меняет ничего.
Тихое замедление встречается часто
Не всякий лимит объявляет о себе, и поэтому за временем ответа стоит следить.
Как лимит проявляется и что значит каждый признак
С этим термином чаще всего знакомятся в момент, когда он случился. Признак, который вы получили, подсказывает правильную реакцию, а неверная догадка обычно делает хуже.
| Что вы видите | Что это обычно значит | Что действительно помогает |
|---|---|---|
| 429 с заголовком Retry-After | сервер прямо говорит, сколько ждать | подождать именно столько. Самый дешёвый верный ответ и самый игнорируемый клиентами |
| 429 без Retry-After | тот же отказ, только без любезности | отступать с растущим интервалом, начиная примерно с минуты |
| 403 после всплеска | ограничитель перестал замедлять и начал отказывать | сбавить темп и какое-то время больше ничего не менять. Новые адреса обычно продлевают блокировку |
| капча там, где её не было | какая-то оценка перешла порог, чаще по сессии, чем по запросу | снизить параллельность и держать сессии дольше вместо открытия новых |
| всё работает, но медленно | тихое замедление, без всякого кода состояния | мерить время ответа, а не только коды, иначе не заметите неделями |
| неполные или пустые результаты | часть API портит ответ вместо отказа | сравнивать с заведомо верным срезом, иначе запишете испорченные данные как настоящие |
Две строки отсюда вообще не зависят от того, какими адресами вы пользуетесь. Если лимит считается на аккаунт или на ключ API, ключ едет в каждом запросе независимо от того, откуда он пришёл, и добавление прокси не меняет ничего, кроме вашего счёта.
Что спрашивают на самом деле
Что значит rate limited?
Сервис посчитал, как часто вы что-то запрашивали, и решил, что вы перешли допустимую границу. После этого он либо замедляет вас, либо заставляет ждать, либо отказывает, пока счётчик не обнулится. Это правило движения, а не суждение о вас.
Почему меня ограничили на сайте?
Обычно потому, что слишком много запросов пришло слишком быстро от того, что сайт считает, а считает он часто не то, что вы думаете. Это может быть адрес, аккаунт, ключ API, сессия или их сочетание. Понять, что именно считается, и есть вся задача.
Сколько длится ограничение?
Столько, сколько длится окно подсчёта. Одни сбрасываются каждую минуту, другие каждый час, третьи раз в сутки, а некоторые продлевают ожидание каждый раз, когда вы стучитесь во время него. Заголовок Retry-After отвечает прямо. Без него считайте, что речь о минутах, а не секундах, и прекратите долбить в плотном цикле: именно это обычно превращает короткий лимит в длинный.
Поможет ли больше прокси?
Только если лимит считается по адресу. Если по аккаунту или ключу, больше адресов не изменят ничего, потому что ключ едет с каждым запросом. Это самая дорогая ошибка в теме: люди покупают трафик, чтобы решить задачу, до которой трафик не дотягивается.
Ограничение это то же, что бан?
Нет. Лимит временный и ждёт вас обратно, поэтому он обычно и сообщает, когда возвращаться. Бан это решение про вас, а не про ваш темп. Принимая 429 за бан, люди начинают менять всё подряд и теряют сессию, которая заработала бы минутой позже.
Что такое HTTP 429?
Код состояния для слишком большого числа запросов. Это вежливая форма ограничения: сервер отказывает этому запросу, остаётся готов обслужить следующий и часто прикладывает заголовок Retry-After с указанием, когда.
Связанные термины
Смотри на практике
Готов использовать ограничение частоты запросов?
SotaProxy даёт доступ к ротирующим резидентским, мобильным, дата-центр и ISP прокси. Без минимальных платежей.
Начать