Tanpa KYC — tanpa ID, tanpa selfie, tanpa dokumen. Bayar dengan crypto: BTC, USDT, USDC, ETH, SOL, LTC
Bahasa: Bahasa Indonesia
Mulai sekarang

Referensi kesalahan proxy · Kode status HTTP

429 Too Many Requests saat scraping: apa artinya dan cara memperbaikinya

Kode status HTTP (4xx, kesalahan klien): pesan tepat di tiap alat, penyebab yang mungkin secara urut, dan perbaikan yang berhasil.

Terakhir diperbarui: · 5 baca dalam menit

Jawaban cepat

Apa arti 429 Too Many Requests dengan proxy?

429 Too Many Requests artinya situs membatasi laju Anda: Anda mengirim lebih banyak permintaan daripada yang diterima dalam jendela waktu. Perbaikannya adalah mengirim lebih sedikit, bukan menyembunyikan lebih banyak. Dengan proxy residential CrawlRelay, hargai header Retry-After, batasi konkurensi per host, dan lakukan backoff eksponensial dengan jitter acak. Rotasi IP untuk melebihi batas situs melanggar sebagian besar ketentuan penggunaan.

429 Too Many Requests sekilas

Kesalahan429 Too Many Requests
TipeKode status HTTP (4xx, kesalahan klien)
Dikirim olehSitus target atau gateway API-nya
Didefinisikan dalamRFC 6585, section 4 (Retry-After: RFC 9110, section 10.2.3)
Mencoba lagi?Ya, setelah jeda Retry-After atau backoff eksponensial
Periksa pertamaBaca header Retry-After dan laju permintaan per detik per host Anda

Apa arti 429 Too Many Requests?

RFC 6585 memperkenalkan 429 untuk pembatasan laju. Server bisa menambahkan header Retry-After, berupa jumlah detik atau tanggal HTTP, untuk memberi tahu kapan harus kembali. API sering menambahkan header sendiri, seperti X-RateLimit-Remaining.

429 adalah jawaban paling sopan yang bisa diberikan situs kepada scraper. Itu menandakan konten tersedia, hanya saja tidak secepat laju Anda saat ini. Situs yang mengabaikan 429 biasanya akan menaikkan menjadi 403, CAPTCHA atau blokir permanen.

Seperti apa a 429 dalam Python, curl, Node.js, dan browser?

Kegagalan yang sama dicetak berbeda di setiap alat. Ini adalah pesan yang perlu dicari di log Anda:

  • Python requests / httpx: status_code == 429, biasanya dengan Retry-After: 30
  • Scrapy: ditangani oleh RetryMiddleware, karena 429 ada di RETRY_HTTP_CODES bawaan
  • curl: HTTP/2 429 diikuti retry-after: di header respons
  • API: dengan body JSON seperti {"error": "rate_limited"}

Apa penyebab a 429?

Kemungkinan besar pertama:

  • Terlalu banyak konkurensi per host. Lima puluh pekerja paralel di satu domain terlihat seperti serangan bagi kebanyakan situs.
  • Tanpa jeda antar permintaan, atau jeda tetap yang membuat banyak pekerja melakukan permintaan bersamaan.
  • Retry tanpa backoff. Gelombang retry setelah 429 pertama meningkatkan beban.
  • Batas berbagi. Beberapa situs menghitung permintaan per akun, per kunci API, atau per cookie sesi, bukan per IP.
  • Endpoint berat. URL pencarian dan penyaringan sering memiliki batas lebih ketat daripada halaman statis.

Bagaimana cara mendiagnosis a 429 langkah demi langkah?

  1. Catat nilai Retry-After dan header pembatas laju saat 429 pertama muncul.
  2. Ukur laju permintaan nyata Anda per host, bukan total laju.
  3. Periksa apakah batas mengikuti IP, cookie, atau kunci API: ubah satu per satu.
  4. Baca dokumentasi API atau robots.txt situs; baris Crawl-delay menyatakan kecepatan yang diminta.
Uji URL yang gagal dengan curl (port HTTP, verbose)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

Bagaimana cara memperbaiki a 429?

  • Hormati Retry-After. Tunggu minimal waktu yang diminta server.
  • Batasi konkurensi per host, bukan hanya secara global. Scrapy memiliki CONCURRENT_REQUESTS_PER_DOMAIN dan AUTOTHROTTLE_ENABLED.
  • Lakukan backoff eksponensial dengan jitter: 1 detik, 2 detik, 4 detik, dst, plus fraksi acak, dibatasi maksimum.
  • Ambil lebih sedikit. Cache respons, kirim If-Modified-Since atau If-None-Match, dan lewati halaman yang tidak berubah.
  • Gunakan API resmi jika situs menyediakannya; batasannya biasanya terdokumentasi.
Python: coba ulang dengan Retry-After, backoff eksponensial, dan jitter
import random
import time

import requests

PROXY = "http://USERNAME:[email protected]:7777"
PROXIES = {"http": PROXY, "https": PROXY}
RETRY_STATUSES = {429, 502, 503, 504}


def fetch(url, attempts=5, timeout=(10, 30)):
    for attempt in range(attempts):
        try:
            r = requests.get(url, proxies=PROXIES, timeout=timeout)
        except (requests.exceptions.ConnectionError, requests.exceptions.Timeout):
            r = None  # dropped exit, reset or timeout: a new connection gets a new exit
        if r is not None and r.status_code not in RETRY_STATUSES:
            return r
        retry_after = r.headers.get("Retry-After", "") if r is not None else ""
        if retry_after.isdigit():
            wait = int(retry_after)
        else:
            wait = min(60, 2 ** attempt) + random.uniform(0, 1)
        time.sleep(wait)
    raise RuntimeError("giving up on %s after %d attempts" % (url, attempts))

Haruskah saya mencoba lagi setelah a 429?

Ya, 429 memang dimaksudkan untuk dicoba ulang nanti. Tunggu jeda Retry-After jika server mengirimnya; jika tidak, gunakan backoff eksponensial dengan jitter dan batas maksimum. Hitung 429 berturut-turut per host dan turunkan konkurensi host saat jumlahnya bertambah. Fungsi Python di bawah ini melakukan bagian dasar tersebut.

Bagaimana 429 Too Many Requests berlaku untuk CrawlRelay?

429 yang Anda terima lewat CrawlRelay membawa header dan body target sendiri: batasan milik situs, dan penjadwalan per host adalah tugas Anda. Gunakan sesi sticky saat situs menghitung permintaan per sesi, agar laju Anda tetap terukur, dan lihat panduan konkurensi untuk angka awal.

Gateway: gw.crawlrelay.com, port 7777 (HTTP, HTTPS melalui CONNECT) dan port 7778 (SOCKS5). Format username: USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}. Terkait: 403 Forbidden · 503 Service Unavailable · Panduan konkurensi.

429 Too Many Requests: pertanyaan yang sering ditanyakan pengembang

Haruskah saya merotasi IP untuk menghindari error 429?

Tidak. 429 adalah permintaan situs agar Anda memperlambat. Menyebar laju permintaan yang sama ke lebih banyak IP untuk tetap di bawah batas per-IP adalah penghindaran, dan sebagian besar ketentuan penggunaan melarangnya. Rotasi berguna untuk penyebaran beban dan lokasi, bukan untuk melewati batas yang diumumkan. Turunkan laju Anda dan gunakan cache jika bisa.

Berapa lama harus menunggu setelah 429?

Tunggu jumlah detik di header Retry-After, atau sampai tanggal yang diberikan. Tanpa header, mulai dari satu atau dua detik dan gandakan jeda setelah setiap 429 baru, dengan tambahan acak dan batas sekitar satu menit. Lanjutkan dengan laju lebih rendah, bukan laju yang menyebabkan 429.

Mengapa saya mendapat 429 dengan hanya beberapa permintaan per menit?

Batas kemungkinan per akun, cookie, atau kunci API, bukan per IP, atau endpoint bisa berat, seperti halaman pencarian. Beberapa situs juga menetapkan batas rendah untuk klien yang mereka klasifikasikan sebagai bot. Periksa header respons dan dokumentasi API situs, dan minta akses jika perlu lebih.

Kesalahan proxy lain dalam referensi ini

Kode status HTTP

Kesalahan browser dan klien

Error koneksi dan TLS

Proxy residensial dengan dokumentasi yang membahas kasus kegagalan

Proxy residensial CrawlRelay dari US$0,50/GB, lalu lintas yang tidak pernah kedaluwarsa.

Dari US$0,50/GB · tanpa KYC

Mulai sekarang