Use Cases

Rotasi proxy untuk scraping CAPTCHA

Kalau satu IP dipakai untuk seluruh crawl, CAPTCHA akan muncul terus dan pipeline Anda melambat. Solusinya bukan salah satu, tapi dua lapis: rotasi proxy menurunkan seberapa sering CAPTCHA dipicu, dan CaptchaAI menyelesaikan CAPTCHA yang tetap lolos. Digabung, keduanya membuat scraping tetap jalan tanpa harus berhenti tiap kali muncul tantangan verifikasi.

Panduan ini menunjukkan cara memilih jenis proxy, merotasinya dengan cerdas, dan menyambungkan hasilnya ke API CaptchaAI — lengkap dengan contoh Python yang bisa langsung Anda pakai.

Kenapa dua lapis, bukan satu

Banyak yang mengira cukup pakai solver saja atau proxy saja. Kenyataannya keduanya menangani masalah yang berbeda. Proxy mengurangi frekuensi CAPTCHA dengan menyebar permintaan ke banyak IP, sehingga tidak ada satu IP pun yang terlihat mencurigakan. CaptchaAI menangani CAPTCHA yang tetap muncul — dan pada target yang agresif, CAPTCHA pasti tetap muncul sesekali betapapun rapinya rotasi Anda.

Pembagian tugasnya jelas:

  • Rotasi proxy — menurunkan berapa sering CAPTCHA dipicu dengan menyebar beban ke banyak IP.
  • CaptchaAI — menyelesaikan CAPTCHA yang tetap lolos, mengembalikan token yang bisa langsung dipakai.

Kalau hanya mengandalkan proxy, setiap CAPTCHA yang lolos akan menghentikan crawl. Kalau hanya mengandalkan solver tanpa rotasi, satu IP akan cepat dicap buruk dan biaya penyelesaian membengkak karena CAPTCHA muncul di hampir setiap permintaan. Kombinasi keduanya menekan biaya sekaligus menjaga kecepatan.

Bagaimana rotasi proxy menurunkan frekuensi CAPTCHA

Situs memicu CAPTCHA berdasarkan pola permintaan per IP. Berikut perbedaan antara satu IP dan rotasi proxy:

Faktor Satu IP Dengan rotasi proxy
Permintaan per menit 10+ langsung memicu CAPTCHA Tersebar ke banyak IP
Reputasi IP Menurun seiring waktu IP baru dari pool
Pola sesi Pola mencurigakan mudah terlihat Pola tersebar di banyak IP
Konsistensi geografis Satu lokasi saja Keragaman geografis alami

Intinya: makin merata beban permintaan, makin kecil kemungkinan sebuah IP menyentuh ambang yang memunculkan verifikasi.

Memilih jenis proxy sesuai target

Tidak semua target butuh proxy termahal. Cocokkan jenis proxy dengan seberapa ketat proteksi situsnya:

Jenis Cocok untuk Frekuensi CAPTCHA Biaya
Residensial Target bernilai tinggi (Google, Amazon) Terendah $$$
Seluler Deteksi sangat rendah Terendah $$$$
ISP/Statis Sesi berkelanjutan Rendah $$
Pusat data Situs bervolume tinggi, proteksi ringan Lebih tinggi $

Aturan praktis memilih

Rekomendasi: untuk situs dengan pemicu CAPTCHA yang agresif, gunakan proxy dengan IP residensial. Untuk situs yang proteksinya ringan, proxy pusat data sudah cukup dan jauh lebih hemat. Mulai dari yang termurah yang masih menjaga frekuensi CAPTCHA tetap wajar, lalu naik kelas hanya kalau ambang deteksi target menuntutnya.

Rotasi proxy dasar dengan Python

Mulai dari pola paling sederhana: pilih proxy acak per sesi, deteksi kalau ada CAPTCHA, lalu kirim ke CaptchaAI untuk diselesaikan.

import requests
import random
import time

PROXIES = [
    "http://user:pass@proxy1.example.com:8080",
    "http://user:pass@proxy2.example.com:8080",
    "http://user:pass@proxy3.example.com:8080",
]

API_KEY = "YOUR_API_KEY"

def get_random_proxy():
    proxy = random.choice(PROXIES)
    return {"http": proxy, "https": proxy}

def scrape_with_rotation(url):
    proxy = get_random_proxy()
    session = requests.Session()
    session.proxies = proxy
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    })

    resp = session.get(url)

    # If CAPTCHA appears, solve it
    if "g-recaptcha" in resp.text or "captcha" in resp.text.lower():
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(resp.text, "html.parser")
        rc = soup.find("div", class_="g-recaptcha")
        if rc:
            site_key = rc["data-sitekey"]
            token = solve_captcha(site_key, url)
            resp = session.post(url, data={"g-recaptcha-response": token})

    return resp.text

def solve_captcha(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": page_url
    })
    task_id = resp.text.split("|")[1]

    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        if result.text.startswith("OK|"): return result.text.split("|")[1]
        raise Exception(result.text)
    raise TimeoutError()

Polanya mengikuti empat langkah baku CaptchaAI: kirim task ke in.php, simpan task ID, polling res.php, lalu pakai token pada permintaan berikutnya.

Rotasi cerdas berbasis skor

Rotasi acak boros. Lebih baik catat proxy mana yang sering memicu CAPTCHA lalu prioritaskan proxy yang riwayatnya bersih:

from collections import defaultdict
import random

class SmartProxyRotator:
    def __init__(self, proxies):
        self.proxies = proxies
        self.captcha_count = defaultdict(int)
        self.success_count = defaultdict(int)

    def get_proxy(self):
        # Prefer proxies with lower CAPTCHA rates
        scored = []
        for proxy in self.proxies:
            total = self.captcha_count[proxy] + self.success_count[proxy]
            if total == 0:
                score = 0.5  # Unknown proxy, neutral score
            else:
                score = self.success_count[proxy] / total
            scored.append((proxy, score))

        # Weight selection by score
        scored.sort(key=lambda x: x[1], reverse=True)
        top_proxies = scored[:max(len(scored) // 2, 1)]
        proxy = random.choice(top_proxies)[0]
        return proxy

    def report_success(self, proxy):
        self.success_count[proxy] += 1

    def report_captcha(self, proxy):
        self.captcha_count[proxy] += 1

# Usage
rotator = SmartProxyRotator(PROXIES)

def scrape(url):
    proxy = rotator.get_proxy()
    resp = requests.get(url, proxies={"http": proxy, "https": proxy})

    if "captcha" in resp.text.lower():
        rotator.report_captcha(proxy)
        # Solve CAPTCHA...
    else:
        rotator.report_success(proxy)

    return resp.text

Dengan skor keberhasilan per proxy, pool Anda menyembuhkan diri sendiri: proxy yang mulai memicu banyak CAPTCHA otomatis jarang terpilih.

Rotasi proxy di Selenium

Untuk target yang butuh browser sungguhan, atur proxy per sesi driver:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def create_driver_with_proxy(proxy_url):
    options = Options()
    options.add_argument(f"--proxy-server={proxy_url}")
    return webdriver.Chrome(options=options)

# Rotate proxy per session
proxy = random.choice(PROXIES)
driver = create_driver_with_proxy(proxy)
driver.get("https://example.com")

Meneruskan proxy ke CaptchaAI untuk Cloudflare

Cloudflare Challenge berbeda dari CAPTCHA biasa: cookie hasilnya terikat pada IP. Karena itu proxy yang Anda pakai harus diteruskan ke CaptchaAI agar cookie yang dikembalikan valid dari IP yang sama:

proxy = "http://user:pass@proxy.example.com:8080"

resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": proxy,
    "proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]

# Poll for qa_validation_cookie cookie
# Use the same proxy for subsequent requests

Praktik terbaik rotasi proxy

  1. Cocokkan geo proxy dengan target — pakai proxy AS untuk situs AS agar konten dan sinyal lokasi konsisten.
  2. Satu sesi per proxy — jangan pakai ulang satu sesi di proxy yang berbeda.
  3. Batasi laju per proxy — maksimal 5–10 permintaan/menit per IP.
  4. Pantau frekuensi CAPTCHA — lacak proxy mana yang paling sering memicu tantangan.
  5. Pakai sesi persisten (sticky session) — pertahankan proxy yang sama untuk alur multi-langkah seperti login lalu checkout.
  6. Tangani kegagalan proxy — lakukan coba ulang dengan proxy lain saat terjadi kesalahan koneksi.

Mengatasi masalah umum

Masalah Solusi
Semua proxy memicu CAPTCHA Beralih ke proxy dengan IP residensial; turunkan laju permintaan
Kesalahan timeout proxy Buang proxy lambat dari pool; perbesar batas waktu
Konten berbeda per proxy Beberapa situs menyajikan konten spesifik geografis; normalisasi hasilnya
Token CAPTCHA gagal dengan proxy Pastikan token dipakai dari sesi/IP yang sama

Biaya: pasangkan proxy dengan paket thread

Bagi banyak freelancer scraping dan tim data di Indonesia, biaya adalah faktor penentu. Di sinilah model penagihan CaptchaAI membantu: penagihan dihitung per thread bersamaan, bukan per penyelesaian, dengan penyelesaian tak terbatas per thread selama sebulan. Artinya semakin efektif rotasi proxy Anda menekan frekuensi CAPTCHA, semakin kecil pula thread yang perlu Anda beli.

Untuk scraping ringan, paket BASIC ($15/bulan, 5 thread) sudah cukup menampung lonjakan CAPTCHA sesekali. Volume yang lebih besar cocok dengan ADVANCE ($90/bulan, 50 thread) karena banyak CAPTCHA bisa diselesaikan paralel tanpa biaya per solve. Tidak ada batas harian dan tidak ada biaya tambahan berdasarkan jenis CAPTCHA. Kalau infrastruktur Anda berjalan di region seperti ap-southeast-1 (Singapura) atau ap-southeast-3 (Jakarta), latensi ke API tetap ringan sehingga polling terasa cepat.

Satu catatan kepatuhan: di bawah UU Pelindungan Data Pribadi (UU 27/2022), scraping sebaiknya dibatasi pada data yang memang Anda berwenang memprosesnya dan hindari data pribadi yang di balik login milik orang lain.

Pertanyaan umum

Apakah CaptchaAI mendukung proxy SOCKS5 dan HTTP?

Ya. Saat mengirim task yang butuh proxy — seperti Cloudflare Challenge — Anda meneruskan proxy lewat parameter proxy dan menyebut tipenya di proxytype (misalnya HTTP). Gunakan proxy yang sama untuk permintaan lanjutan agar cookie hasil tetap valid.

Berapa laju permintaan per proxy yang aman?

Sebagai titik awal, batasi 5–10 permintaan per menit per IP, lalu sesuaikan berdasarkan frekuensi CAPTCHA yang Anda pantau. Target yang agresif mungkin menuntut laju lebih rendah; situs yang longgar bisa lebih tinggi.

Teknik rotasi proxy dan penyelesaian CAPTCHA itu sendiri bersifat netral. Yang menentukan legalitas adalah data yang Anda ambil: batasi pada data yang Anda berwenang memprosesnya sesuai UU 27/2022 dan hindari data pribadi orang lain. Artikel ini bukan nasihat hukum.

Kenapa proxy harus sama untuk Cloudflare Challenge?

Karena cookie qa_validation_cookie yang dihasilkan terikat pada IP yang menyelesaikan tantangan. Kalau Anda menyelesaikannya lewat satu IP lalu memakai cookie dari IP lain, situs akan menganggapnya tidak valid. Untuk jenis CAPTCHA lain, token umumnya valid terlepas dari IP.

Panduan terkait

Komentar dinonaktifkan untuk artikel ini.