Karşılaştırmalar

Sabit Oturumlar ve Dönüşümlü Oturumlar: CAPTCHA'lar için En İyi Proxy Stratejisi

Yapışkan oturumlar belirli bir süre boyunca aynı IP'yi korur. Dönüşümlü oturumlar istek başına yeni bir IP atar. Yanlış olanı seçmek CAPTCHA oranlarını şişirir ve API kredilerinin boşa harcanmasına neden olur.


Her Mod Nasıl Çalışır?

STICKY SESSION:
  Request 1 ──▶ IP: 192.168.1.50 ──▶ site.com/login
  Request 2 ──▶ IP: 192.168.1.50 ──▶ site.com/dashboard
  Request 3 ──▶ IP: 192.168.1.50 ──▶ site.com/account
  (Same IP for all requests in the session window)

ROTATING SESSION:
  Request 1 ──▶ IP: 192.168.1.50 ──▶ site.com/page1
  Request 2 ──▶ IP: 10.0.0.77   ──▶ site.com/page2
  Request 3 ──▶ IP: 172.16.5.22 ──▶ site.com/page3
  (Different IP per request)

Bire Bir Karşılaştırma

Faktör Yapışkan Dönen
İstek başına IP 1-30 dakika boyunca aynı Her istekte yeni
Oturum tutarlılığı Yüksek Yok
CAPTCHA oranı (çok adımlı akışlar) Düşük (%5-10) Yüksek (%30-50)
CAPTCHA oranı (tek sayfalar) Orta (%10-20) Düşük (%5-10)
Jeton geçerliliği Daha yüksek — aynı IP Uyumsuzluk riski
Hız Hızlı (bağlantıyı yeniden kullanır) Daha yavaş (yeni bağlantı)
Riski yasakla İşaretlenmişse daha yüksek Düşük — her seferinde yeni IP
Maliyet Aynı veya biraz daha fazlası Aynı
Şunlar için en iyisi Giriş, ödeme, kimlik doğrulama Toplu kazıma, arama

Yapışkan Oturumlar Kazandığında

Çok Adımlı İş Akışları

CAPTCHA'lar, belirteçleri istekte bulunan IP'ye göre doğrular. IP'niz çözme ve gönderme arasında değişirse jeton reddedilebilir.

import requests
import time

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

# Sticky session: same IP for the entire login flow
STICKY_PROXY = {
    "http": "http://user-session-abc123:pass@proxy.example.com:5000",
    "https": "http://user-session-abc123:pass@proxy.example.com:5000",
}

session = requests.Session()
session.proxies = STICKY_PROXY
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
    "AppleWebKit/537.36 Chrome/126.0.0.0 Safari/537.36",
})


def login_with_captcha(url, sitekey, username, password):
    """Full login flow — MUST use same IP throughout."""
    # Step 1: Load login page (IP: 192.168.1.50)
    session.get(url)

    # Step 2: Solve CAPTCHA (solved against IP: 192.168.1.50)
    token = solve_recaptcha(sitekey, url)

    # Step 3: Submit login (MUST be IP: 192.168.1.50)
    resp = session.post(url, data={
        "username": username,
        "password": password,
        "g-recaptcha-response": token,
    })

    return resp.status_code == 200


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

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

    raise TimeoutError("CAPTCHA solve timeout")

IP Tutarlılığı Neden Önemlidir?

Sticky session:

  1. Browser loads page    → IP: 5.5.5.5
  2. CAPTCHA solved        → Token bound to session
  3. Form submitted        → IP: 5.5.5.5 ✅ Token accepted

Rotating session:

  1. Browser loads page    → IP: 5.5.5.5
  2. CAPTCHA solved        → Token bound to session
  3. Form submitted        → IP: 9.9.9.9 ❌ Token may be rejected

Dönüşümlü Oturumlar Kazandığında

Toplu Sayfa Kazıma

Her sayfa bağımsızdır. Dönen IP'ler, istekleri daha büyük bir havuza yayarak IP başına algılamayı azaltır.

import concurrent.futures

ROTATING_PROXY = {
    "http": "http://user:pass@rotating.proxy.example.com:5000",
    "https": "http://user:pass@rotating.proxy.example.com:5000",
}


def scrape_page(url):
    """Each request gets a fresh IP automatically."""
    resp = requests.get(
        url,
        proxies=ROTATING_PROXY,
        headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"},
        timeout=30,
    )
    if resp.status_code == 200:
        return url, resp.text
    return url, None


urls = [f"https://example.com/products?page={i}" for i in range(1, 501)]

with concurrent.futures.ThreadPoolExecutor(max_workers=10) as pool:
    results = list(pool.map(scrape_page, urls))
    success = sum(1 for _, html in results if html)
    print(f"Scraped: {success}/{len(urls)}")

Arama Motoru Kazıma

Arama motorları IP başına sorgu hacmini izler. Döndürme hız sınırlarını ortadan kaldırır:

def scrape_search(query, pages=10):
    results = []
    for page in range(pages):
        # Each request → new IP
        resp = requests.get(
            "https://search-engine.example.com/search",
            params={"q": query, "start": page * 10},
            proxies=ROTATING_PROXY,
            timeout=20,
        )
        results.append(resp.text)
        time.sleep(2)
    return results

Hibrit Strateji

Her iki modu da aynı ardışık düzende kullanın:

class HybridProxyManager:
    """Sticky for multi-step flows, rotating for single requests."""

    def __init__(self, provider_host, username, password, port=5000):
        self.host = provider_host
        self.username = username
        self.password = password
        self.port = port

    def get_rotating_proxy(self):
        return {
            "http": f"http://{self.username}:{self.password}@{self.host}:{self.port}",
            "https": f"http://{self.username}:{self.password}@{self.host}:{self.port}",
        }

    def get_sticky_proxy(self, session_id, duration_min=10):
        sticky_user = f"{self.username}-session-{session_id}-ttl-{duration_min}"
        return {
            "http": f"http://{sticky_user}:{self.password}@{self.host}:{self.port}",
            "https": f"http://{sticky_user}:{self.password}@{self.host}:{self.port}",
        }


proxy_mgr = HybridProxyManager("proxy.example.com", "user", "pass")


def scrape_with_auto_strategy(url, needs_login=False):
    if needs_login:
        # Multi-step → sticky
        import uuid
        session_id = uuid.uuid4().hex[:8]
        proxy = proxy_mgr.get_sticky_proxy(session_id)
    else:
        # Single page → rotating
        proxy = proxy_mgr.get_rotating_proxy()

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

Node.js Uygulaması

const axios = require("axios");

const CAPTCHAAI_KEY = "YOUR_API_KEY";
const PROXY_HOST = "proxy.example.com";
const PROXY_PORT = 5000;

function getProxy(mode, sessionId = null) {
  const user =
    mode === "sticky" ? `user-session-${sessionId}` : "user";

  return {
    proxy: {
      host: PROXY_HOST,
      port: PROXY_PORT,
      auth: { username: user, password: "pass" },
    },
  };
}

// Rotating: bulk scrape
async function scrapePages(urls) {
  const results = [];
  for (const url of urls) {
    const config = getProxy("rotating");
    const resp = await axios.get(url, { ...config, timeout: 30000 });
    results.push({ url, data: resp.data });
  }
  return results;
}

// Sticky: login flow
async function loginFlow(loginUrl, sitekey, credentials) {
  const sessionId = Date.now().toString(36);
  const config = getProxy("sticky", sessionId);

  // Step 1: Load page
  await axios.get(loginUrl, config);

  // Step 2: Solve CAPTCHA
  const submitResp = await axios.post(
    "https://ocr.captchaai.com/in.php",
    null,
    {
      params: {
        key: CAPTCHAAI_KEY,
        method: "userrecaptcha",
        googlekey: sitekey,
        pageurl: loginUrl,
        json: 1,
      },
    }
  );
  const taskId = submitResp.data.request;

  let token;
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const res = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: CAPTCHAAI_KEY, action: "get", id: taskId, json: 1 },
    });
    if (res.data.request !== "CAPCHA_NOT_READY") {
      token = res.data.request;
      break;
    }
  }

  // Step 3: Submit with same IP
  return axios.post(
    loginUrl,
    {
      ...credentials,
      "g-recaptcha-response": token,
    },
    config
  );
}

Karar Matrisi

İş akışı Önerilen neden
Giriş yap / kayıt ol Yapışkan IP'ye bağlı belirteç
Ödeme / ödeme Yapışkan Oturum çerezleri aynı IP'ye ihtiyaç duyar
Toplu sayfa kazıma Dönen Yükü dağıtır
Arama motoru kazıma Dönen IP başına hız sınırlarını önler
API yoklaması (aynı uç nokta) Dönen IP başına parmak izini azaltır
Çok sayfalı gezinme Yapışkan IP tarafından takip edilen çerezler
Fiyat takibi Dönen Birçok bağımsız istek
Hesap yönetimi Yapışkan Oturum bütünlüğü
CAPTCHA ile form gönderimi Yapışkan Belirteç-IP bağlama
Reklam doğrulama Dönen Farklı kullanıcıları simüle edin

Sabit Oturum Süresi

Süre En İyisi Risk
1 dakika Hızlı form gönderimleri Akışın ortasında sona erebilir
5 dakika Standart giriş + işlemler İyi denge
10 dakika Karmaşık çok sayfalı akışlar Orta düzeyde yasaklanma riski
30 dakika Genişletilmiş tarama oturumları Daha yüksek yasaklanma riski
60 dakika Uzun hesap işlemleri En yüksek yasaklanma riski

Temel kural: Yapışkan süreyi beklenen akış sürenizin 2 katına ayarlayın.


Sorun giderme

Sorun Sebep Düzeltme
CAPTCHA jetonu çözümden sonra reddedildi Çözme ve gönderme arasında IP değişti Yapışkan oturuma geç
Tek sayfalarda yüksek CAPTCHA oranı Aynı yapışkan IP çok fazla sayfaya çarpıyor Döndürmeye geç
Oturum çerezleri kayboldu Yapışkan oturumun süresi doldu TTL süresini artırın
Yavaş dönme performansı Yeni IP başına bağlantı yükü Bağlantı havuzunu kullan
Yapışkan oturumda yasaklı IP Tüm istekler işaretli IP'yi paylaşır Oturum TTL'sini azaltın veya gecikmeler ekleyin

SSS

Yapışkan ve döndürmeyi tek bir projede karıştırabilir miyim?

Evet. Hibrit yaklaşımı kullanın; kimlik doğrulama akışları için yapışkan, veri toplama için dönüşümlü. Çoğu proxy sağlayıcısı aynı planda her iki modu da destekler.

Yapışkan oturum aynı IP'yi garanti ediyor mu?

Çoğu sağlayıcı bunu TTL penceresi içinde garanti eder. IP'nin kullanılamaması durumunda (taşıyıcının yeniden atanması, havuz rotasyonu), yeni bir IP atanır.

Hangi mod daha ucuz?

Aynı fiyat; moddan bağımsız olarak GB başına veya istek başına ödeme yaparsınız. Maliyet farkı CAPTCHA oranlarından kaynaklanmaktadır: yanlış mod → daha fazla CAPTCHA → daha yüksek CaptchaAI harcaması.

Proxy sağlayıcımla kalıcı oturumları nasıl ayarlayabilirim?

Çoğu, kullanıcı adında bir oturum kimliği kullanır: user-session-abc123. Tam format için sağlayıcınızın belgelerine bakın. Biz koruyoruzParlak Veriler,Akıllı proxy, VeOksilablarözel kılavuzlarda.


İlgili Kılavuzlar


Proxy stratejinizi iş akışınızla eşleştirin —CaptchaAI anahtarınızı alınCAPTCHA'ları herhangi bir oturum modunda yönetmek için.

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