Короткие ответы
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, она не заменяет превышающий срок коротким ожиданием.
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 предоставляет разбор даты; пример дополнительно проверяет формат. Рабочий планировщик также требует монотонного срока всей задачи, конечного числа попыток и координации работников. Закройте или освободите ответ до ожидания нового запроса.
Сократите работу, создающую ограничение
- Приостановите затронутую очередь и проверьте количество работников всех процессов.
- Удалите дублирующие загрузки; используйте разрешённый кеш, условные запросы или документированные события, если они подходят.
- Учтите повторы библиотеки вместе со своими: вложенные циклы могут незаметно умножать попытки.
- Возобновляйте только по правилам отвечающего сервиса. Если область ограничения неясна, уточните её вместо пробной смены адресов.
Работники, темп, соединения и сессии требуют раздельного планирования. Один свободный слот не означает право на новый старт. Для проверки рекламы или каталога стоимость запроса не заменяет проверку разрешённости и полезного результата.
Читайте подробный код только там, где он есть
| Сообщённый код | Что проверить |
|---|---|
| E_RATE_LIMITED_CONN | Параллельные соединения и указания ответа |
| E_SESSION_LIMIT | Создание и переиспользование sticky-сессий |
| rate_limited API | Операцию API и её область ограничения |
Имена сессий относятся к маршруту задачи. Не создавайте их всё больше, пытаясь снять ограничение: sticky и ротация не дают нового API-лимита. Конкретные текущие условия проверяйте в кабинете и документации · English.
Не повторяйте неопределённую запись как чтение
Потерянный ответ покупки не доказывает, что действие не состоялось. Сохраните исходный заказ и идентичность запроса, используйте документированный повтор того же действия и проверку состояния. Новый ключ или вторая оплата могут создать ещё одну покупку. Порядок криптооплаты помогает отделить возврат со страницы оплаты от подтверждённого платежа.
Для поддержки запишите операцию, UTC-время, версию клиента, статус, безопасные заголовки и попытки; секреты и личное содержимое исключите. Редакция от 2 ноября 2026 года сохраняет код английского владельца и его историческую фикстуру 23 октября отдельно. Живое ограничение намеренно не вызывалось.
Допустимое использование
Выполняйте только разрешённые действия в пределах правил назначения. Сохраняйте учётные данные и личное содержимое в тайне; соблюдайте политику допустимого использования · English.