Hadiah Ganda

IP berotasi:Beli 50GB, dapatkan 10GB gratis

IP statis:Dapatkan tambahan 7 hari untuk setiap pembelian 30 hari, plus 500MB per pesanan

Beli Sekarang >

Peringatan KeamananSitus web palsu untuk phishing ( rola-ip.com) menyamar sebagai situs web resmi kami sebelumnya. Satu-satunya situs web resmi ROLA IP adalah rola-ip.co (pastikan menggunakan .co sebagai akhiran domainnya). Untuk melindungi dana Anda, jangan melakukan pembayaran di domain lain mana pun!

Cara Mengatasi Reddit Rate Limit Exceeded dan Error 429

Marcus Bennett

29 Okt 2026 · Panduan · 14 menit baca

Cara mengatasi Reddit rate limit exceeded dimulai dengan menghentikan request berulang, membaca pesan lengkap, lalu mencari tahu operasi yang dibatasi. Jeda saat mengirim komentar, kuota API yang habis, dan peringatan keamanan jaringan membutuhkan penanganan berbeda.

Bagi pengguna aplikasi atau browser, langkah pertama adalah berhenti melakukan refresh dan pengiriman ulang. Bagi pengembang, periksa header waktu tunggu, kurangi konkurensi, dan pastikan semua worker berbagi satu anggaran request. Jangan mengubah beberapa pengaturan sekaligus sebelum penyebabnya jelas.

Ringkasan: apa yang perlu dilakukan saat Reddit membatasi request?

Hentikan sumber request yang memicu error, lalu ikuti waktu tunggu yang tersedia. Diagnosis akan lebih akurat jika pesan, header, dan konteks operasi dicatat sebelum konfigurasi diubah.

  • Catat gejalanya: pesan lengkap, waktu kejadian, tindakan yang gagal, dan status HTTP jika tersedia.
  • Ikuti sinyal waktu tunggu: hitung mundur di layar, Retry-After, atau header reset API.
  • Periksa sumber request ganda: tab, ekstensi, script, dan worker yang berjalan bersamaan.
  • Kelola kuota secara bersama: worker dengan client OAuth yang sama tidak memiliki jatah terpisah.
  • Uji satu perubahan: setelah masa tunggu selesai, lakukan satu percobaan terkontrol dan periksa hasilnya.

reddit-app-rate-limited-message

Apa arti “rate limit exceeded” dan error 429 di Reddit?

HTTP 429 berarti jumlah request telah melampaui batas yang diterapkan server. Status ini tidak menjelaskan sendiri apakah penghitungan terkait akun, client API, alamat IP, atau operasi tertentu.

Respons dapat menyertakan Retry-After untuk memberi tahu kapan client boleh mencoba kembali. Penjelasan lintas layanan tersedia di panduan HTTP 429 Rola IP dalam bahasa Inggris. Untuk Reddit, gunakan konteks berikut sebagai titik awal diagnosis.

Aspek yang diperiksa Contoh situasi Bukti yang dibutuhkan Tindakan pertama
Akun atau tindakan Mengirim postingan, komentar, pesan, atau melakukan login Hitung mundur, notifikasi akun, jenis tindakan Hentikan tindakan dan ikuti waktu tunggu
Browser atau sesi Refresh berulang, ekstensi, beberapa tab Request di latar belakang dan perbandingan sesi Matikan refresh otomatis dan isolasi client
Client OAuth Integrasi Data API Header batas pemakaian dan log aplikasi Jeda antrean bersama
IP keluar atau rute jaringan Beberapa client menggunakan jaringan yang sama Pola kegagalan pada rute yang sama Periksa trafik gabungan dan lakukan perbandingan terkontrol
Endpoint Hanya satu jenis operasi yang gagal Isi respons dan dokumentasi endpoint Kurangi operasi tersebut
Konkurensi atau lonjakan Banyak worker mengirim request bersamaan Jumlah request aktif, waktu kirim, jumlah retry Kurangi konkurensi dan pusatkan retry

Tabel ini berisi hipotesis diagnosis, bukan daftar resmi seluruh penghitung internal Reddit. Error 429 saja tidak membuktikan IP diblokir atau akun ditangguhkan.

Misalnya, beberapa orang di kantor bisa memakai koneksi internet yang sama. Kesamaan jaringan merupakan petunjuk yang perlu diuji, bukan alasan untuk langsung menyalahkan IP. Periksa juga apakah mereka menjalankan ekstensi atau integrasi yang mengirim request secara bersamaan.

Cara mengatasi Reddit rate limit exceeded di browser atau aplikasi

Untuk penggunaan sehari-hari, utamakan pesan yang terlihat dan hentikan aktivitas berulang. Setelah waktu tunggu berakhir, lakukan satu pemeriksaan agar hasilnya mudah ditafsirkan.

  1. Berhenti melakukan refresh atau mengirim ulang. Tutup tab Reddit yang tidak diperlukan. Jeda ekstensi, script, atau alat yang memuat ulang halaman di latar belakang.
  2. Simpan rincian error. Catat waktu, tindakan, status, dan durasi yang ditampilkan. Sembunyikan token, cookie, serta identitas akun jika mengambil tangkapan layar.
  3. Tunggu sesuai petunjuk. Setelah hitung mundur berakhir, coba sekali secara manual. Hindari rangkaian request untuk sekadar mengecek apakah batas sudah hilang.
  4. Bandingkan antarmuka. Periksa aplikasi resmi dan browser yang didukung, tanpa menjalankan otomasi bersamaan. Jendela privat dapat membantu mengisolasi masalah sesi.
  5. Periksa gangguan layanan. Jika perangkat dan jaringan yang berbeda mengalami masalah serupa, lihat halaman status Reddit sebelum mengubah pengaturan lokal.
  6. Ikuti prosedur yang sesuai dengan pesan. Masalah kata sandi, penguncian keamanan, moderasi, dan banding akun memerlukan jalur penanganan masing-masing.

Menghapus cookie akan mengeluarkan akun dari sesi browser. Langkah ini berguna jika sesi bermasalah, tetapi bukan cara untuk mengosongkan kuota API atau mengakhiri masa tunggu pada akun.

Berapa batas request API Reddit?

Naskah sumber merujuk angka 100 kueri per menit per client ID OAuth untuk akses gratis yang memenuhi syarat, dengan rata-rata dihitung dalam jendela 10 menit, berdasarkan peninjauan Data API Wiki pada 30 September 2026. Gunakan angka tersebut sebagai rujukan bertanggal, bukan jaminan kapasitas untuk semua aplikasi atau semua periode.

Periksa Reddit Data API Wiki, kondisi akses aplikasi, dan respons yang benar-benar diterima. Rujukan yang sama menyebut bahwa trafik tanpa OAuth atau kredensial login tidak diterima. Jangan memberi setiap worker jatah penuh sebesar kuota client yang sama.

Header Informasi yang tersedia Penggunaan dalam aplikasi
X-Ratelimit-Used Perkiraan pemakaian selama periode berjalan Pantau konsumsi gabungan
X-Ratelimit-Remaining Perkiraan jatah yang tersisa Tunda pekerjaan yang tidak mendesak saat saldo menipis
X-Ratelimit-Reset Perkiraan detik sampai periode direset Jadwalkan pembukaan antrean kembali
Retry-After Waktu tunggu, jika disertakan Tentukan kapan request boleh dicoba ulang

reddit-official-rate-limits

Mengapa Reddit membatasi request?

Pembatasan membantu mengendalikan beban layanan, spam, percobaan login berulang, dan otomasi berlebihan. Batas jumlah request juga berjalan bersama aturan akses, autentikasi, serta ketentuan penggunaan data.

Untuk integrasi, pilih Data API atau kemampuan Developer Platform yang tersedia bagi aplikasi tersebut. Kuota teknis, izin akses, dan hak penggunaan data merupakan hal yang berbeda. Data API Terms mengharuskan penggunaan identitas OAuth serta User-Agent yang benar dan melarang upaya mengakali batas API. Penanganan teknis selanjutnya berfokus pada antrean, sesi, dan validasi respons.

Bagaimana pengembang menangani error 429 Reddit?

Pusatkan kendali retry dan pemakaian kuota sebelum mengubah jeda antar-request. Masalah sering membesar ketika beberapa komponen mengulang request yang sama tanpa menghitung total percobaannya.

Mulai dengan log yang cukup untuk diagnosis:

  • waktu kejadian dalam UTC;
  • metode HTTP dan path endpoint tanpa query sensitif;
  • status HTTP serta ringkasan aman dari pesan error;
  • Retry-After dan header batas pemakaian yang tersedia;
  • label internal aplikasi yang tidak memuat rahasia;
  • jumlah worker, request aktif, nomor percobaan, dan waktu berjalan;
  • status cache: data ditemukan atau perlu diminta kembali;
  • ID request atau trace yang telah disamarkan jika diperlukan.

Jangan merekam token OAuth, client secret, cookie, kata sandi proxy, header Authorization lengkap, atau URL berisi kredensial.

reddit-http-429-response

1. Hentikan retry yang bertumpuk

Library HTTP, worker, orkestrator, dan kode aplikasi dapat memiliki aturan retry sendiri. Jika semuanya mengulang kegagalan yang sama, satu request berubah menjadi banyak request tambahan.

Tetapkan satu komponen sebagai pengendali retry. Batasi atau nonaktifkan pengulangan pada lapisan lain agar jumlah percobaan tetap bisa dihitung.

2. Bagikan saldo kuota ke seluruh worker

Simpan informasi sisa kuota dan waktu reset dalam scheduler bersama. Jangan biarkan setiap worker menganggap seluruh kuota tersedia untuk dirinya sendiri.

Saat saldo mendekati nol, hentikan penerimaan pekerjaan yang tidak mendesak. Jika aplikasi melayani interaksi pengguna, sisihkan kapasitas untuk operasi yang sensitif terhadap waktu.

3. Gunakan cache dan gabungkan request identik

Simpan respons yang boleh digunakan kembali sesuai kebutuhan dan aturan retensinya. Pola single-flight menggabungkan beberapa permintaan atas data yang sama menjadi satu request keluar: 10 worker tidak perlu mengirim 10 request identik.

Penghapusan konten dan perubahan data tetap perlu diperhatikan. Cache bukan alasan untuk menyimpan data tanpa batas waktu.

4. Kurangi konkurensi sebelum memperpendek jeda

Jumlah request rata-rata dan jumlah request yang aktif bersamaan adalah dua hal berbeda. Mulai dengan 1 worker, amati respons, lalu sesuaikan kapasitas berdasarkan bukti.

Memberi jeda acak pada 50 worker tidak otomatis menghilangkan lonjakan jika semuanya mulai pada waktu yang sama. Ukur konkurensi, frekuensi, dan jumlah retry secara terpisah.

Contoh Python untuk menangani error 429 dengan retry terbatas

Template berikut membatasi percobaan, membaca waktu tunggu, menolak redirect, dan memeriksa JSON sebelum menyatakan berhasil. Kode dipertahankan dari naskah asal; bagian setelah kode menjelaskan parameter, batas pemeriksaan input, dan cakupan demonstrasinya.

Siapkan lingkungan dan konfigurasi

Gunakan lingkungan virtual agar dependensi proyek terpisah. Contoh berikut memasang Requests, lalu menampilkan versi Python dan paket yang benar-benar terpasang:

python -m pip install requests
python --version
python -m pip show requests

Catat versi yang digunakan saat pengujian dan kunci dependensi setelah kombinasi tersebut tervalidasi. Perintah di atas merupakan langkah persiapan, bukan bukti bahwa template sudah diuji pada lingkungan pembaca.

Simpan kode sebagai reddit_429.py. Atur lima variabel berikut melalui konfigurasi proses atau pengelola rahasia proyek.

Variabel Nilai yang harus disiapkan
REDDIT_OAUTH_TOKEN Token OAuth aplikasi
REDDIT_USER_AGENT Identitas aplikasi yang deskriptif dan benar
AUTHORIZED_REDDIT_URL URL HTTPS endpoint yang diperlukan di oauth.reddit.com
AUTHORIZED_REDDIT_PATH_PREFIX Prefix path paling sempit yang sesuai dengan endpoint
REQUIRED_JSON_FIELDS Nama field JSON tingkat atas yang wajib ada, dipisahkan koma

Pilih endpoint, scope OAuth, dan field berdasarkan operasi yang akan dilakukan. Jangan menyalin field milik endpoint lain, dan hindari prefix / jika cakupan yang lebih sempit cukup.

Kode lengkap dari naskah sumber

from datetime import datetime, timezone
from email.utils import parsedate_to_datetime
import math
import os
import random
import time
from typing import Optional
from urllib.parse import urlparse

import requests


OAUTH_TOKEN = os.environ["REDDIT_OAUTH_TOKEN"]
USER_AGENT = os.environ["REDDIT_USER_AGENT"]
AUTHORIZED_PATH_PREFIX = os.environ["AUTHORIZED_REDDIT_PATH_PREFIX"].rstrip("/") or "/"
REQUIRED_JSON_FIELDS = tuple(
    field.strip()
    for field in os.environ["REQUIRED_JSON_FIELDS"].split(",")
    if field.strip()
)

MAX_ATTEMPTS = 3
MAX_INLINE_WAIT_SECONDS = 300
TOTAL_ELAPSED_BUDGET_SECONDS = 360
ALLOWED_REDDIT_HOST = "oauth.reddit.com"


def validate_authorized_url(value: str) -> str:
    parsed = urlparse(value)
    prefix_matches = (
        parsed.path.startswith("/")
        if AUTHORIZED_PATH_PREFIX == "/"
        else parsed.path == AUTHORIZED_PATH_PREFIX
        or parsed.path.startswith(f"{AUTHORIZED_PATH_PREFIX}/")
    )
    if (
        parsed.scheme != "https"
        or parsed.hostname != ALLOWED_REDDIT_HOST
        or parsed.port not in (None, 443)
        or parsed.username is not None
        or parsed.password is not None
        or parsed.fragment
        or not prefix_matches
    ):
        raise ValueError("Refusing a Reddit URL outside the approved HTTPS host and path")
    return value


if not REQUIRED_JSON_FIELDS:
    raise ValueError("REQUIRED_JSON_FIELDS must name the endpoint's required fields")

AUTHORIZED_URL = validate_authorized_url(os.environ["AUTHORIZED_REDDIT_URL"])


def parse_retry_after(value: Optional[str]) -> Optional[int]:
    if value is None:
        return None
    text = value.strip()
    if text.isdigit():
        return int(text)
    try:
        retry_at = parsedate_to_datetime(text)
    except (TypeError, ValueError, OverflowError):
        return None
    if retry_at.tzinfo is None:
        return None
    seconds = (retry_at - datetime.now(timezone.utc)).total_seconds()
    return max(0, math.ceil(seconds))


def parse_reset_seconds(value: Optional[str]) -> Optional[int]:
    if value is None:
        return None
    try:
        seconds = float(value.strip())
    except (TypeError, ValueError):
        return None
    if not math.isfinite(seconds) or seconds < 0:
        return None
    return math.ceil(seconds)


def parse_wait_seconds(response: requests.Response) -> int:
    candidates = [
        parse_retry_after(response.headers.get("Retry-After")),
        parse_reset_seconds(response.headers.get("X-Ratelimit-Reset")),
    ]
    valid = [value for value in candidates if value is not None]
    if not valid:
        raise RuntimeError("429 had no valid Retry-After or reset value; defer the job")
    return max(1, max(valid))


def validate_success_payload(response: requests.Response) -> dict:
    media_type = response.headers.get("Content-Type", "").split(";", 1)[0].lower()
    if media_type != "application/json" and not media_type.endswith("+json"):
        raise RuntimeError(f"Unexpected success content type: {media_type or 'missing'}")
    try:
        payload = response.json()
    except ValueError as exc:
        raise RuntimeError("Success response did not contain valid JSON") from exc
    if not isinstance(payload, dict):
        raise RuntimeError("Success JSON did not match the expected object shape")
    missing = [field for field in REQUIRED_JSON_FIELDS if field not in payload]
    if missing:
        raise RuntimeError(f"Success JSON is missing required fields: {', '.join(missing)}")
    return payload


session = requests.Session()
session.headers.update(
    {
        "Authorization": f"Bearer {OAUTH_TOKEN}",
        "User-Agent": USER_AGENT,
        "Accept": "application/json",
    }
)

started_at = time.monotonic()

for attempt in range(1, MAX_ATTEMPTS + 1):
    elapsed = time.monotonic() - started_at
    if elapsed >= TOTAL_ELAPSED_BUDGET_SECONDS:
        raise RuntimeError("Elapsed-time budget exhausted before the next request")

    try:
        response = session.get(
            AUTHORIZED_URL,
            timeout=(5, 20),
            allow_redirects=False,
        )
    except requests.Timeout as exc:
        raise RuntimeError("Reddit request timed out; no retry was scheduled") from exc
    except requests.RequestException as exc:
        raise RuntimeError("Reddit request failed before a valid response arrived") from exc

    if 300 <= response.status_code < 400:
        raise RuntimeError("Redirect refused so the Bearer token stays on the approved host")

    if response.status_code == 429:
        wait_seconds = parse_wait_seconds(response)
        if attempt == MAX_ATTEMPTS:
            raise RuntimeError("Reddit rate limit persisted after bounded attempts")
        if wait_seconds > MAX_INLINE_WAIT_SECONDS:
            raise RuntimeError(
                f"Defer this job for at least {wait_seconds} seconds instead of sleeping inline"
            )

        sleep_seconds = wait_seconds + random.uniform(0.25, 1.0)
        if time.monotonic() - started_at + sleep_seconds > TOTAL_ELAPSED_BUDGET_SECONDS:
            raise RuntimeError("Defer the job because the next wait exceeds its elapsed-time budget")
        time.sleep(sleep_seconds)
        continue

    if not 200 <= response.status_code < 300:
        try:
            response.raise_for_status()
        except requests.HTTPError as exc:
            raise RuntimeError(f"Reddit returned HTTP {response.status_code}") from exc
        raise RuntimeError(f"Unexpected non-success HTTP status: {response.status_code}")

    validate_success_payload(response)
    print(
        "Validated Reddit JSON response",
        response.status_code,
        "required_fields=",
        ",".join(REQUIRED_JSON_FIELDS),
    )
    break
else:
    raise RuntimeError("Request loop ended without a response")

Jalankan setelah seluruh variabel lingkungan terisi:

python reddit_429.py

Arti parameter dan kriteria keberhasilan

Parameter Nilai Arti
MAX_ATTEMPTS 3 Maksimal tiga percobaan, termasuk request pertama
MAX_INLINE_WAIT_SECONDS 300 detik Batas waktu tunggu dasar di dalam proses
TOTAL_ELAPSED_BUDGET_SECONDS 360 detik Anggaran waktu yang diperiksa sebelum request atau penantian berikutnya
timeout (5, 20) Timeout koneksi 5 detik dan pembacaan 20 detik
Tambahan jeda acak 0,25–1,0 detik Jitter setelah waktu tunggu dasar
Host yang diizinkan oauth.reddit.com Host HTTPS yang diterima oleh pemeriksaan awal

Perilaku utamanya adalah sebagai berikut:

  • Retry-After dapat berisi detik atau tanggal HTTP. X-Ratelimit-Reset juga dapat berisi angka desimal yang dibulatkan ke atas.
  • Jika kedua header valid, kode memilih waktu tunggu yang lebih lama. Jika tidak ada nilai valid, tugas dihentikan agar dijadwalkan ulang.
  • Batas 300 detik berlaku pada waktu tunggu dasar. Jitter ditambahkan setelahnya.
  • Anggaran 360 detik diperiksa di antara operasi. Nilai ini bukan tenggat keras yang dapat memutus pembacaan respons yang sedang berlangsung.
  • Timeout (5, 20) berlaku pada koneksi dan pembacaan, bukan durasi maksimum seluruh tugas.
  • Redirect ditolak. Error koneksi dan timeout menghentikan eksekusi; kode tidak menjadwalkan retry otomatis untuk dua kondisi tersebut.
  • Respons sukses harus bertipe JSON, berbentuk objek, dan memuat field yang dikonfigurasi. Kehadiran field belum membuktikan tipe, isi, atau kelengkapan seluruh data sudah benar.

Pesan sukses hanya muncul setelah pemeriksaan JSON lolos. Untuk endpoint berpaginasi, tambahkan validasi jumlah data dan status halaman pada integrasi sebenarnya.

Dua pemeriksaan input yang perlu diperkuat

Kode sumber masih memeriksa prefix path sebelum normalisasi URL oleh client HTTP. Path seperti /api/../outside dapat memenuhi pemeriksaan prefix /api, lalu berubah menjadi /outside saat request disiapkan. Sebelum memakai template dalam integrasi, cocokkan path URL yang sudah dinormalisasi dengan daftar endpoint yang memang diperlukan, serta tolak penulisan path yang ambigu. Pemeriksaan host tetap harus dipertahankan.

Selain itu, isdigit() menerima sebagian karakter non-ASCII yang tidak bisa diproses oleh int(). Untuk detik pada Retry-After, batasi pemeriksaan ke angka desimal ASCII dan tangani kegagalan konversi. Uji kedua perubahan ini secara lokal sebelum mengirim request.

Untuk pembahasan strategi yang lebih luas, termasuk metode HTTP yang aman diulang, baca panduan retry Python Requests dalam bahasa Inggris.

Apa yang dibuktikan demonstrasi lokal?

Naskah asal menyertakan demonstrasi deterministik: respons pertama 429 dengan Retry-After: 1, lalu respons kedua 200. Demonstrasi ini ditujukan untuk menunjukkan alur menunggu dan mencoba kembali, bukan akses langsung ke Reddit.

bounded-retry-terminal

Saat memvalidasi template, simpan versi kode, tanggal, sistem operasi, versi dependensi, dan keluaran yang sudah disamarkan. Uji setidaknya alur 429 lalu sukses, percobaan habis, waktu tunggu tidak valid, timeout, serta JSON yang tidak memenuhi syarat. Jangan menganggap satu respons 200 sebagai bukti kestabilan layanan.

Kapan proxy Reddit dengan sticky session berguna?

Sticky session berguna ketika beberapa langkah harus memakai alamat IP keluar yang sama, misalnya alur login, cookie, dan navigasi browser. Proxy mengatur rute jaringan; kuota client OAuth dan masa tunggu pada akun tetap merupakan kontrol yang terpisah.

Kebutuhan rute dapat muncul dalam pengujian iklan regional, pemeriksaan tampilan publik di pasar yang menjadi cakupan proyek, atau pemisahan jalur pengujian. Pilih mode sesi berdasarkan ketergantungan alur pada status, bukan sekadar seberapa sering IP dapat berganti.

proxy-scope-boundary

Client Pilihan sesi Bukti yang diperiksa
Python Requests Satu rute stabil untuk tugas terautentikasi; pisahkan pengujian regional yang independen Client OAuth, endpoint, konkurensi, dan jadwal yang sama; status, field JSON, serta negara keluar
Scrapy Kendalikan antrean, konkurensi, dan retry secara terpusat; gunakan sesi terpisah untuk batch pasar yang independen Tingkat duplikasi, jumlah item, field wajib, respons 401/403/429, dan label rute
Selenium Sticky session untuk login, cookie, redirect, dan navigasi beberapa langkah Negara tujuan, IP keluar pada awal dan akhir, mode sesi, URL akhir, serta elemen halaman yang diharapkan

Menilai kecocokan Rola IP dengan alur kerja

Solusi proxy Reddit Rola IP dalam bahasa Inggris dapat menjadi titik awal untuk mengevaluasi kebutuhan rute. Sebelum memilih, periksa jenis jaringan yang tersedia untuk akun, lokasi, protokol, pilihan sesi, pengaturan rotasi, dan kompatibilitasnya dengan client yang digunakan.

Verifikasi setiap kemampuan dan perilaku parameter melalui dokumentasi jaringan proxy Rola IP serta konfigurasi akun. Jangan mengasumsikan semua jenis jaringan, lokasi, protokol, atau opsi sesi tersedia pada setiap akun.

  • Pilih sesi residential yang tetap jika cookie, login, atau paginasi bergantung pada kesinambungan sesi.
  • Pisahkan sesi antarpekerjaan jika pengujian tiap negara atau batch memang independen.
  • Hindari rotasi per request di tengah alur Selenium yang bergantung pada sesi. Cookie dapat tetap sama sementara IP keluar berubah.
  • Cocokkan protokol dan konfigurasi DNS dengan client. Periksa alamat server, port, autentikasi, dan pengaturan yang benar-benar dibuat untuk akun; jangan menebaknya dari nama produk.

Bandingkan rute dengan satu variabel yang berubah

Gunakan pengujian terkontrol agar hasilnya bisa dikaitkan dengan rute:

  1. Pertahankan identitas Reddit, endpoint, payload, versi client, frekuensi, konkurensi, dan jadwal pengujian.
  2. Bandingkan koneksi kontrol dengan rute proxy. Jangan mengubah mode sesi dan pola request sekaligus.
  3. Periksa IP keluar dan negara melalui endpoint pemeriksaan IP menggunakan client yang sama.
  4. Validasi hasil Reddit berdasarkan field wajib atau elemen halaman, bukan status HTTP saja.
  5. Catat label rute, mode sesi, dan hasil tanpa menyimpan kata sandi proxy atau cookie.
  6. Jika kedua rute menghasilkan 429 yang terkait client OAuth yang sama, arahkan pemeriksaan ke antrean dan pemakaian kuota.

Sebelum menambah kapasitas, periksa satuan biaya, masa berlaku paket, perlakuan trafik gagal atau retry, dan batas anggaran proyek. Kebutuhan biaya harus dihitung dari beban kerja yang terukur.

Cara mengurangi request yang tidak perlu dalam pengumpulan data

Penghematan request berasal dari pemilihan sumber data, cache, dan pekerjaan inkremental. Menambah worker sebelum menghilangkan pekerjaan duplikat justru dapat memperbesar antrean dan jumlah retry.

Panduan web scraping versus API dalam bahasa Inggris membantu membandingkan cara akses sebelum membuat pipeline. Untuk proyek yang sudah memiliki cakupan akses yang jelas, gunakan urutan berikut:

  1. Tentukan field, frekuensi pembaruan, dan periode retensi yang benar-benar dibutuhkan.
  2. Periksa apakah endpoint API atau kemampuan Developer Platform menyediakan data tersebut.
  3. Tempatkan request dalam satu antrean dengan batas konkurensi yang eksplisit.
  4. Bagikan informasi sisa kuota dan waktu reset ke seluruh worker.
  5. Gunakan cache yang sesuai serta gabungkan pekerjaan identik.
  6. Ambil perubahan terbaru secara inkremental, bukan mengunduh ulang seluruh riwayat.
  7. Pisahkan kegagalan autentikasi, penolakan akses, 429, redirect, dan respons dengan isi yang tidak sesuai.
  8. Evaluasi kebutuhan kapasitas serta jalur akses yang tersedia jika volume pekerjaan melampaui kemampuan integrasi saat ini.

Status 200 OK belum cukup untuk menandai tugas selesai. Respons bisa berupa halaman login, permintaan persetujuan, atau data yang tidak lengkap. Periksa URL akhir jika relevan, tipe konten, field wajib, paginasi, dan jumlah catatan.

Checklist sebelum menjalankan tugas berikutnya

Antrean siap dijalankan kembali jika batas percobaan, pembagian kuota, dan kriteria sukses sudah jelas. Gunakan checklist ini untuk memastikan perbaikan tetap berlaku pada jadwal berikutnya.

  • [ ] Satu komponen mengendalikan retry.
  • [ ] Jumlah percobaan dan waktu tunggu dibatasi.
  • [ ] Seluruh worker berbagi informasi kuota dan reset.
  • [ ] Request identik digabungkan bila memungkinkan.
  • [ ] Token, cookie, dan kredensial proxy tidak masuk log.
  • [ ] Respons 401, 403, 429, redirect, dan 200 dengan isi keliru diklasifikasikan secara terpisah.
  • [ ] Endpoint, autentikasi, dependensi, dan konfigurasi jaringan sesuai dengan lingkungan pengujian.
  • [ ] Kebijakan retensi serta penghapusan data sudah diterapkan.
  • [ ] Hasil pemeriksaan dan perubahan konfigurasi dapat ditelusuri dari catatan pengujian.

FAQ