Розбір помилки · 1 хв читання

Як виправити 429 Too Many Requests під час скрапінгу

429 — це ліміт частоти, а не бан: сервер просить вас пригальмувати. Надійне рішення поєднує backoff, повагу до Retry-After і розподіл навантаження між пулом IP. Показуємо як, із робочим кодом на Python.

429 — це обмеження швидкості, а не стіна

HTTP 429 Too Many Requests означає, що ви надіслали забагато запитів за відведене вікно й сервер вас пригальмовує. Це навмисне тимчасово: на відміну від жорсткого блокування, 429 зазвичай минає, щойно ви стишите темп. Багато серверів додають заголовок Retry-After, який прямо каже, скільки секунд чекати; послухатися його — найдієвіший крок, бо так ви вирівнюєтеся з реальним лімітом сервера, а не гадаєте.

Важелів два. Перший — темп: менше запитів за секунду з однієї IP, паузи, обмежена паралельність і експоненційне відкочування, коли з'явився 429. Другий — розподіл: розкидати запити по кількох IP, щоб кожна лишалася під своїм лімітом. Починати треба з темпу: пул проксі множить вашу пропускну здатність, але не дає права гатити по сайту. s4m дає датацентрові проксі з авторизацією (SOCKS5 1080, HTTP 3128, USER:PASS), щоб розвести навантаження, і це прямо стикується з гайдом про ротацію проксі та скрапінгом на requests.

Поважайте Retry-After, відкочуйтеся, потім ротуйте

Цикл завантаження, який слухається Retry-After, відкочується експоненційно з джитером і розкидає запити по пулу проксі. Замініть USER:PASS.

python
import random, time
import requests

USER, PASS, HOST = "USER", "PASS", "proxy.s4m.online"
POOL = [
    f"socks5h://{USER}:{PASS}@{HOST}:1080",
    f"http://{USER}:{PASS}@{HOST}:3128",
]

def polite_get(url, max_tries=6):
    for attempt in range(1, max_tries + 1):
        proxy = random.choice(POOL)
        r = requests.get(url, proxies={"http": proxy, "https": proxy},
                         timeout=(5, 20))
        if r.status_code != 429:
            r.raise_for_status()
            return r

        # 429: prefer the server's Retry-After, else exponential backoff
        retry_after = r.headers.get("Retry-After")
        if retry_after and retry_after.isdigit():
            wait = int(retry_after)
        else:
            wait = min(2 ** attempt, 60) + random.random()  # cap + jitter

        print(f"[{attempt}/{max_tries}] 429; waiting {wait:.1f}s")
        time.sleep(wait)

    raise SystemExit(f"still rate-limited after {max_tries} tries")

# Global throttle: cap how fast you fire, independent of retries.
MIN_INTERVAL = 0.5  # seconds between requests per worker
_last = 0.0
def throttled_get(url):
    global _last
    delta = time.time() - _last
    if delta < MIN_INTERVAL:
        time.sleep(MIN_INTERVAL - delta)
    _last = time.time()
    return polite_get(url)

print(throttled_get("https://httpbin.org/status/200").status_code)

У якому порядку лікувати 429

Спершу найдешевше й найввічливіше.

Слухайтеся Retry-After

Якщо у відповіді 429 є заголовок Retry-After, зачекайте рівно стільки, скільки він каже, і лише потім повторюйте. Це сервер сам називає свій ліміт — і більшість 429 знімається одразу.

Додайте експоненційне відкочування з джитером

Коли Retry-After немає, чекайте 2, 4, 8… секунд (зі стелею) плюс невеликий випадковий джитер між спробами — так ви перестаєте гатити й уникаєте синхронних повторів.

Пригальмуйте темп запитів

Обмежте кількість запитів за секунду й паралельність, щоб узагалі не впиратися в ліміт. Рівномірний повільніший обхід доходить до кінця надійніше, ніж ривок, який раз у раз глушать.

Розкидайте навантаження по IP

Коли поведінка на рівні окремого запиту вже ввічлива, ротуйте пул проксі, щоб кожна IP лишалася під своїм лімітом. Так безпечна пропускна здатність множиться, а темп на жодній окремій адресі не зростає.

Чому сама лише ротація не рятує

Спокуса велика: вважати проксі способом ігнорувати ліміти — просто додай адрес і стріляй далі. Це виходить боком. Сайт, який віддає 429, стежить за патернами запитів, і злива з мінливого набору адрес, що б'є в ті самі ендпоінти в ту саму мить, сама по собі є помітним підписом, який переростає в жорсткий бан. Ротація множить ввічливу пропускну здатність, а не замінює ввічливість. Завжди поєднуйте пул проксі з відкочуванням, Retry-After, реалістичним темпом і розумною паралельністю.

Чесно кажучи, деякі ліміти варто просто поважати: перевірте, чи немає офіційного API або задокументованого дозволеного темпу, перш ніж обходити 429, і читайте умови сайту. А коли розподіл справді потрібен, датацентрові проксі s4m з авторизацією розводять навантаження й тарифікуються за трафіком, тож розширювати пул дешево; механіка — у гайді про ротацію. Пам'ятайте: датацентрові IP можуть банити цілими діапазонами, а від фінгерпринтів ротація не рятує взагалі. Прототипуйте дешево на безкоштовному списку проксі й перевіряйте виходи інструментами.

FAQ

Відповіді на питання

Чи 429 — це постійний бан?

Ні. HTTP 429 Too Many Requests — це тимчасове обмеження темпу, воно зазвичай минає, щойно ви стишите хід. Послухайтеся заголовка Retry-After, додайте відкочування, знизьте темп запитів — і доступ зазвичай повертається.

Що найдієвіше проти 429?

Поважати заголовок Retry-After, коли сервер його надсилає. Він точно каже, скільки чекати, тож ви вирівнюєтеся з лімітом сервера, замість гадати й знову потрапляти під гальмо.

Чи прибере ротація проксі помилки 429?

Вона допомагає, тримаючи кожну IP під її лімітом, але тільки разом із відкочуванням і пригальмовуванням. Ротація без ввічливого темпу дає помітну зливу, яка переростає в жорсткіші блокування, тож поєднуйте одне з одним.

Чи достатньо проксі s4m, щоб обійти будь-який ліміт?

Жоден чесний інструмент такого не пообіцяє. Датацентрові проксі s4m розводять навантаження по IP, але відкочування й пригальмовування все одно потрібні, датацентрові діапазони можуть позначити цілком, а частину лімітів варто просто поважати й піти через офіційний API.

Розводьте навантаження чесно

Поєднайте відкочування й пригальмовування з датацентровими проксі з авторизацією на proxy.s4m.online, щоб кожна IP лишалася під лімітом. Оплата за фактичним трафіком, виділена IP — за бажанням.

Цю сторінку знаходять за запитами

  • як виправити 429 too many requests під час скрапінгу
  • резидентські проксі
  • свіжий список безкоштовних проксі
  • список безкоштовних проксі
  • як працює openvpn
  • як перевірити http проксі
  • як сконфігурувати wireguard
  • проксі для парсингу для бізнесу
  • socks5 проксі покроково
  • Tinyproxy, 3proxy і Squid
  • чи безпечний авторизація проксі
  • ip адреса налаштування
  • UDP через SOCKS5
  • чи безпечний openvpn
  • openvpn
  • обхід DPI
  • http проксі
  • ip адреса

Реальні пошукові фрази, на які відповідає ця сторінка — за посиланнями відкриються матеріали, що розкривають тему глибше.