Перейти к содержанию

Руководство · На русском

HTTP 429: лимит запросов и Retry-After

После 429 сначала определите отвечающий сервис и операцию. Прочитайте его правила ожидания, уменьшите работу, создающую запросы, и сохраните конечные пределы попыток и времени. Статус сам по себе не показывает, считает ли сервис адрес, ключ, аккаунт или другой ресурс.

Каталог и инструкции — на русском. Страница отдельного товара, аккаунт, корзина, оплата и полные условия обслуживания пока доступны на английском.

Опубликовано:

Короткие ответы

HTTP 429 означает неправильный пароль прокси?

Нет. Авторизация и ограничение нагрузки — разные проверки. Установите этап ответа: CONNECT, запрос назначения или вызов API. Используйте конкретный код, только если он действительно возвращён.

Сколько ждать по Retry-After?

Поле может задавать секунды либо HTTP-дату. Соблюдайте указанный сервисом срок. Если он не помещается в оставшееся время задачи, остановите или перенесите её, не сокращая ожидание.

Что делать, если заголовка нет?

Отсутствие указания не разрешает немедленный цикл повторов. Изучите политику отвечающего сервиса, уменьшите нагрузку и сохраните автоматический повтор выключенным до ясного решения.

Смена IP снимает ограничение?

Не считайте смену адреса разрешением продолжать отвергнутую работу. Ограничение может относиться к аккаунту, ключу или ресурсу. Используйте поддерживаемый порядок восстановления и снижайте запросы.

Сначала назовите операцию и источник ответа

Вызов магазина, согласование прокси и запрос к сайту — три разные операции. Успешный CONNECT устанавливает туннель, но назначение затем может вернуть собственный 429. Сохраните статусы и ошибку клиента отдельно по руководству curl.

Выводы только из имеющихся сведений
СвидетельствоСледующий шаг
429 при CONNECTЧитать ответ шлюза и документированный код
CONNECT успешен, далее 429Проверить ответ и правила назначения
API вернул rate_limitedЧитать ограничения именно этой API-операции
Голый 429 без надёжного этапаОставить причину неизвестной и собрать контекст

RFC 6585 оставляет способ идентификации и подсчёта запросов отвечающему сервису. Не выводите из номера статуса ни конкретный лимит аккаунта, ни неисправность пула. Несколько процессов могут использовать одну область ограничения.

Проверьте ожидание и остаток бюджета

RFC 9110 допускает целое неотрицательное число секунд или HTTP-дату. Для даты нужен достоверный текущий момент. Противоречивое или неподдерживаемое значение требует проверки, а не выбора наиболее короткого ожидания.

Вымышленные входы для решения
УказаниеОсталось времениРешение
120 секунд300 секундПроверить разрешение и попытки перед планированием
120 секунд30 секундОстановить или перенести, не ждать лишь 30
Корректная будущая датаИзвестный общий срокСопоставить время и точность часов
Пустое или ошибочное полеЛюбой срокСохранить автоматический повтор выключенным

Проверьте решение без отправки запроса

Функция возвращает задержку либо None. Передайте одно однозначное поле уже полученного ответа, aware-время и оставшийся бюджет ожидания. Поддерживается предпочтительный формат HTTP-даты GMT; другие формы оставлены для проверки. Код не отправляет запрос, не ждёт сам и не выдаёт разрешение.

Учебные 120 и 300 секунд — не условия сервиса. Если функция возвращает None, она не заменяет превышающий срок коротким ожиданием.

Ограниченное решение Retry-Afterpython
import math
import re
from datetime import datetime, timezone
from email.utils import format_datetime, parsedate_to_datetime


def retry_delay(value, *, now, remaining_seconds):
    """Return a permitted wait, or None to stop and review."""
    if now.tzinfo is None or not math.isfinite(remaining_seconds):
        raise ValueError("Use an aware clock and a finite time budget")
    if remaining_seconds < 0 or value is None:
        return None
    value = value.strip()
    if re.fullmatch(r"[0-9]+", value):
        # An enormous delay cannot fit this small-job example.
        if len(value) > 18:
            return None
        delay = int(value)
    else:
        try:
            date = parsedate_to_datetime(value)
            if date.tzinfo is None:
                return None
            date = date.astimezone(timezone.utc)
            # Accept the preferred HTTP date form; review other formats.
            if format_datetime(date, usegmt=True) != value:
                return None
            delay = max(0, math.ceil((date - now).total_seconds()))
        except (TypeError, ValueError, OverflowError):
            return None
    # Never shorten a server's wait to fit our job deadline.
    return delay if delay <= remaining_seconds else None


# Fictional response value and job budget; no network request is made.
wait = retry_delay("120", now=datetime.now(timezone.utc),
                   remaining_seconds=300)
print("Stop and review" if wait is None else f"Wait at least {wait}s")

Python email.utils предоставляет разбор даты; пример дополнительно проверяет формат. Рабочий планировщик также требует монотонного срока всей задачи, конечного числа попыток и координации работников. Закройте или освободите ответ до ожидания нового запроса.

Сократите работу, создающую ограничение

  1. Приостановите затронутую очередь и проверьте количество работников всех процессов.
  2. Удалите дублирующие загрузки; используйте разрешённый кеш, условные запросы или документированные события, если они подходят.
  3. Учтите повторы библиотеки вместе со своими: вложенные циклы могут незаметно умножать попытки.
  4. Возобновляйте только по правилам отвечающего сервиса. Если область ограничения неясна, уточните её вместо пробной смены адресов.

Работники, темп, соединения и сессии требуют раздельного планирования. Один свободный слот не означает право на новый старт. Для проверки рекламы или каталога стоимость запроса не заменяет проверку разрешённости и полезного результата.

Читайте подробный код только там, где он есть

Реальные обозначения из справки подключения
Сообщённый кодЧто проверить
E_RATE_LIMITED_CONNПараллельные соединения и указания ответа
E_SESSION_LIMITСоздание и переиспользование sticky-сессий
rate_limited APIОперацию API и её область ограничения

Имена сессий относятся к маршруту задачи. Не создавайте их всё больше, пытаясь снять ограничение: sticky и ротация не дают нового API-лимита. Конкретные текущие условия проверяйте в кабинете и документации · English.

Не повторяйте неопределённую запись как чтение

Потерянный ответ покупки не доказывает, что действие не состоялось. Сохраните исходный заказ и идентичность запроса, используйте документированный повтор того же действия и проверку состояния. Новый ключ или вторая оплата могут создать ещё одну покупку. Порядок криптооплаты помогает отделить возврат со страницы оплаты от подтверждённого платежа.

Для поддержки запишите операцию, UTC-время, версию клиента, статус, безопасные заголовки и попытки; секреты и личное содержимое исключите. Редакция от 2 ноября 2026 года сохраняет код английского владельца и его историческую фикстуру 23 октября отдельно. Живое ограничение намеренно не вызывалось.

Допустимое использование

Выполняйте только разрешённые действия в пределах правил назначения. Сохраняйте учётные данные и личное содержимое в тайне; соблюдайте политику допустимого использования · English.

Следующий шаг