Penjelasan Mendalam

Rotating egress jaringan yang diotorisasi: Best Practice untuk Solve CAPTCHA

Memutar proxy perumahan menetapkan IP pengguna nyata baru untuk setiap permintaan (atau per sesi). Untuk alur kerja yang banyak CAPTCHA, strategi rotasi yang tepat dapat mengurangi tingkat tantangan sebesar 50-80% — dan CaptchaAI menangani sisanya.


Mengapa IP Perumahan Mengurangi CAPTCHA

Jenis Proxy Sumber IP Tarif CAPTCHA Mengapa
Pusat Data Penyedia Cloud/hosting Tinggi (30-70%) Rentang IP yang diketahui ditandai
Perumahan ISP rumah sebenarnya Rendah (5-15%) Sepertinya pengguna sebenarnya
Seluler Operator seluler Sangat rendah (1-5%) Dibagikan oleh ribuan pengguna
ISP Kelas perumahan statis Rendah (5-10%) Menggabungkan kecepatan + kepercayaan

Sistem CAPTCHA (terutama reCAPTCHA) memeriksa database reputasi IP. IP residensial dari ISP asli memiliki riwayat yang bersih karena mereka milik pelanggan sebenarnya.


Strategi Rotasi

1. Rotasi Per Permintaan (Default)

import requests

proxies = {
    "http": "http://user:pass@gateway.proxy.com:7777",
    "https": "http://user:pass@gateway.proxy.com:7777",
}

# Each request gets a new IP
for url in urls:
    resp = requests.get(url, proxies=proxies, timeout=30)
    # New IP after each request

Terbaik untuk: Scraping banyak halaman di berbagai situs. Risiko CAPTCHA: Rendah per permintaan, tetapi tidak dapat mempertahankan sesi.

2. Rotasi Sesi Lengket

import random
import string

def get_sticky_session(duration_min=10):
    session_id = "".join(random.choices(string.ascii_lowercase, k=8))
    return {
        "http": f"http://user-session-{session_id}:pass@gateway.proxy.com:7777",
        "https": f"http://user-session-{session_id}:pass@gateway.proxy.com:7777",
    }

# Same IP for the whole CAPTCHA workflow
session_proxy = get_sticky_session(duration_min=10)

# Step 1: Load page
resp = requests.get("https://staging.example.com/qa-form", proxies=session_proxy)

# Step 2: Solve CAPTCHA (same IP)
token = solve_captcha("https://staging.example.com/qa-form", sitekey)

# Step 3: Submit (same IP — required for token validity)
resp = requests.post("https://target.com/submit", proxies=session_proxy, data={
    "g-recaptcha-response": token,
})

Terbaik untuk: Formulir yang dilindungi CAPTCHA dan alur kerja multi-langkah. Risiko CAPTCHA: Sangat rendah — IP yang konsisten membangun kepercayaan.

3. Rotasi Per-Domain

domain_sessions = {}

def get_domain_proxy(domain):
    """Same IP per domain, different IP per domain."""
    if domain not in domain_sessions:
        session_id = "".join(random.choices(string.ascii_lowercase, k=8))
        domain_sessions[domain] = get_sticky_session()
    return domain_sessions[domain]

# site-a.com always uses the same IP
proxy_a = get_domain_proxy("site-a.com")
# site-b.com gets a different IP
proxy_b = get_domain_proxy("site-b.com")

Praktik Terbaik

1. Cocokkan Geo dengan Target

# Target site is US-based? Use US residential IP
us_proxy = "http://user-country-us:pass@gateway.proxy.com:7777"

# Target is Germany? Use DE residential IP
de_proxy = "http://user-country-de:pass@gateway.proxy.com:7777"

IP yang tidak cocok secara geografis memicu lebih banyak CAPTCHA (misalnya, mengakses situs AS dari IP Nigeria).

2. Tetapkan Tarif Permintaan yang Realistis

import time
import random

def human_pace_requests(urls, proxy):
    results = []
    for url in urls:
        resp = requests.get(url, proxies=proxy, timeout=30)
        results.append(resp)

        # Random delay between requests
        delay = random.uniform(2, 8)
        time.sleep(delay)

    return results
Nilai Risiko CAPTCHA
1 req/sec Tinggi (pola bot)
1 req/5-10 detik Sedang
1 req/10-30 detik Rendah (seperti manusia)
Acak 3-15 detik Sangat rendah

3. Gunakan Header yang Tepat

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/126.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "DNT": "1",
    "Connection": "keep-alive",
    "Upgrade-Insecure-Requests": "1",
}

resp = requests.get(url, proxies=proxy, headers=headers)

4. Tangani Larangan IP dengan Anggun

def fetch_with_retry(url, max_retries=3):
    for attempt in range(max_retries):
        # New proxy for each retry
        proxy = get_sticky_session()

        try:
            resp = requests.get(url, proxies=proxy, timeout=30)

            if resp.status_code == 403:
                print(f"IP banned, rotating... (attempt {attempt + 1})")
                time.sleep(5)
                continue

            if resp.status_code == 429:
                print(f"Rate limited, backing off...")
                time.sleep(30)
                continue

            return resp

        except requests.exceptions.ProxyError:
            print(f"Proxy failed, rotating...")
            continue

    raise Exception(f"Failed after {max_retries} retries")

5. Pemanasan IP Baru

def warm_up_proxy(proxy):
    """Visit neutral sites before target to build session trust."""
    warm_urls = [
        "https://www.google.com",
        "https://www.wikipedia.org",
    ]
    for url in warm_urls:
        try:
            requests.get(url, proxies=proxy, timeout=15)
            time.sleep(random.uniform(2, 5))
        except Exception:
            pass

Pola Integrasi CaptchaAI

import requests
import time
import re
import random
import string

CAPTCHAAI_KEY = "YOUR_API_KEY"
CAPTCHAAI_URL = "https://ocr.captchaai.com"


def solve_recaptcha(site_url, sitekey):
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    task_id = resp.json()["request"]

    for _ in range(60):
        time.sleep(5)
        resp = requests.get(f"{CAPTCHAAI_URL}/res.php", params={
            "key": CAPTCHAAI_KEY, "action": "get",
            "id": task_id, "json": 1,
        })
        data = resp.json()
        if data["request"] != "CAPCHA_NOT_READY":
            return data["request"]

    raise TimeoutError("Timeout")


def scrape_url(url, proxy_config):
    """Complete scrape with proxy + CAPTCHA solving."""
    session_id = "".join(random.choices(string.ascii_lowercase, k=8))
    proxy = {
        "http": f"http://user-session-{session_id}:{proxy_config['pass']}@{proxy_config['host']}",
        "https": f"http://user-session-{session_id}:{proxy_config['pass']}@{proxy_config['host']}",
    }

    resp = requests.get(url, proxies=proxy, timeout=30)

    match = re.search(r'data-sitekey="([^"]+)"', resp.text)
    if match:
        token = solve_recaptcha(url, match.group(1))
        resp = requests.post(
            url.replace("/form", "/submit"),
            proxies=proxy,
            data={"g-recaptcha-response": token},
        )

    return resp.text

Optimasi Biaya

Strategi Dampak
Gunakan perumahan hanya untuk situs yang banyak CAPTCHA Hemat 50-70% vs. seluruh perumahan
Kurangi frecookiensi CAPTCHA dengan pemanasan sesi Lebih sedikit panggilan CaptchaAI
Batch halaman sebelum halaman yang dilindungi CAPTCHA Dibutuhkan lebih sedikit sesi melekat
Pantau kualitas IP dan hilangkan kumpulan yang buruk Keberhasilan percobaan pertama yang lebih tinggi

Pemecahan Masalah

Masalah Penyebab Solusi
CAPTCHA di setiap halaman Kumpulan IP buruk Ganti penyedia atau zona proxy
Token ditolak IP diputar antara selesaikan dan kirim Gunakan sesi yang melekat
407 kesalahan Format autentikasi salah Periksa format nama pengguna penyedia yang sebenarnya
Respons lambat Gerbang kelebihan beban Coba jam di luar jam sibuk atau endpoint yang berbeda
Sesi berakhir di tengah alur kerja TTL lengket terlalu pendek Minta durasi sesi lebih lama

Pertanyaan Umum

Berapa banyak IP perumahan yang saya perlukan?

Untuk scraping sedang (1000 halaman/day), kumpulan penyedia utama mana pun sudah cukup. Gerbang rotasi menangani manajemen IP secara otomatis.

Apakah saya merotasi IP selama solve CAPTCHA?

Tidak pernah. Pertahankan IP yang sama dari pemuatan halaman hingga pengiriman token. Putar setelah tugas selesai.

Apakah berputar lebih cepat daripada lengket?

Rotasi per permintaan memiliki latensi lebih rendah (tidak ada overhead sesi). Sticky menambahkan beberapa ms per permintaan. Untuk alur kerja CAPTCHA, perbedaannya dapat diabaikan.


Panduan Terkait


Optimalkan rotasi proxy Anda untuk mengurangi CAPTCHA —dapatkan kunci CaptchaAI Andauntuk menyelesaikan sisanya.

Komentar dinonaktifkan untuk artikel ini.