Teknik Açıklamalar

Dönüşümlü Konut Vekilleri: CAPTCHA Çözümü için En İyi Uygulamalar

Dönüşümlü yerleşik proxy'ler, her istek için (veya oturum başına) yeni bir gerçek kullanıcı IP'si atar. CAPTCHA'nın yoğun olduğu iş akışları için doğru rotasyon stratejisi, zorluk oranlarını %50-80 oranında azaltabilir ve gerisini CaptchaAI halleder.


Konut IP'leri CAPTCHA'ları Neden Azaltır?

Vekil Türü IP Kaynağı CAPTCHA Oranı neden
Veri merkezi Cloud/hosting sağlayıcısı Yüksek (%30-70) Bilinen IP aralıkları işaretlendi
Konut Gerçek ev İSS'leri Düşük (%5-15) Gerçek kullanıcıya benziyor
Mobil Hücresel taşıyıcılar Çok düşük (%1-5) Binlerce kullanıcı tarafından paylaşıldı
İSS Statik konut sınıfı Düşük (%5-10) Hız + güveni birleştirir

CAPTCHA sistemleri (özellikle reCAPTCHA) IP itibar veritabanlarını kontrol eder. Gerçek İSS'lerden gelen konut IP'leri, gerçek abonelere ait oldukları için temiz geçmişlere sahiptir.


Rotasyon Stratejileri

1. İstek Başına Rotasyon (Varsayılan)

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

En iyisi: Farklı sitelerdeki birçok sayfayı kazımak. CAPTCHA riski: İstek başına düşük ancak oturum sürdürülemiyor.

2. Sabit Oturum Rotasyonu

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,
})

En iyisi: CAPTCHA korumalı formlar ve çok adımlı iş akışları. CAPTCHA riski: Çok düşük — tutarlı IP güven oluşturur.

3. Alan Adı Başına Rotasyon

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")

En İyi Uygulamalar

1. Coğrafyayı Hedefle Eşleştirin

# 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"

Coğrafi olarak eşleşmeyen IP'ler daha fazla CAPTCHA'yı tetikler (örneğin, bir Nijerya IP'sinden bir ABD sitesine erişim).

2. Gerçekçi İstek Oranlarını Belirleyin

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
Oran CAPTCHA Riski
1 istek/sec Yüksek (bot modeli)
1 req/5-10 sn Orta
1 req/10-30 sn Düşük (insan benzeri)
Rastgele 3-15 sn Çok düşük

3. Doğru Başlıkları Kullanın

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. IP Yasaklamalarını İncelikle Ele Alın

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. Yeni IP'leri Isıtın

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

CaptchaAI Entegrasyon Modeli

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

Maliyet Optimizasyonu

Strateji Etki
Yalnızca CAPTCHA ağırlıklı siteler için konutları kullanın Tüm konutlara kıyasla %50-70 tasarruf edin
Oturum ısınmasıyla CAPTCHA sıklığını azaltın Daha az CaptchaAI çağrısı
CAPTCHA korumalı sayfalardan önce toplu sayfalar Daha az kalıcı oturuma ihtiyaç var
IP kalitesini izleyin ve hatalı havuzları bırakın Daha yüksek ilk deneme başarısı

Sorun giderme

Sorun Sebep Düzeltme
CAPTCHA her sayfada Kötü IP havuzu Proxy sağlayıcısını veya bölgesini değiştirin
Jeton reddedildi Çözme ve gönderme arasında döndürülen IP Yapışkan oturumları kullanın
407 hataları Kimlik doğrulama biçimi yanlış Sağlayıcının tam kullanıcı adı biçimini kontrol edin
Yavaş yanıtlar Aşırı yüklenmiş ağ geçidi Yoğun olmayan saatleri veya farklı uç noktaları deneyin
Oturum iş akışının ortasında sona eriyor Yapışkan TTL çok kısa Daha uzun oturum süresi isteyin

SSS

Kaç tane konut IP'sine ihtiyacım var?

Orta düzeyde kazıma için (1000 sayfa/day), herhangi bir büyük sağlayıcının havuzu yeterlidir. Rotasyon ağ geçidi IP yönetimini otomatik olarak yönetir.

CAPTCHA çözümü sırasında IP'leri döndürebilir miyim?

Asla. Sayfa yüklemesinden belirteç gönderimine kadar aynı IP'yi koruyun. Görev tamamlandıktan sonra döndürün.

Yapışkandan daha mı hızlı dönüyor?

İstek başına rotasyonun gecikme süresi daha düşüktür (oturum ek yükü yoktur). Yapışkan istek başına birkaç ms ekler. CAPTCHA iş akışları için fark önemsizdir.


İlgili Kılavuzlar


Daha az CAPTCHA için proxy rotasyonunuzu optimize edin —CaptchaAI anahtarınızı alıngerisini çözmek için.

Bu makale için yorumlar devre dışı bırakılmıştır.