Integrations

Bright Data + CaptchaAI: Eksiksiz Proxy Entegrasyon Kılavuzu

Bright Data ile CaptchaAI'yi birlikte kullanmanın mantığı tek cümlede özetlenir: proxy ağı sayfayı temiz bir IP üzerinden açar, CaptchaAI de karşınıza çıkan CAPTCHA'yı kendi altyapısında çözer. İki servis birbirinin işine karışmaz — biri trafiği taşır, diğeri doğrulamayı çözer. Bu rehber, Bright Data'nın (eski adıyla Luminati; 195 ülkede 72 milyondan fazla konut IP'si) proxy türlerini CaptchaAI API'siyle nasıl birleştireceğinizi, üretime hazır Python ve Node.js örnekleriyle anlatır. Kurulum sonunda elinizde:

  • Temiz bir IP üzerinden çalışan, geo-eşleşmeli bir tarama katmanı,
  • reCAPTCHA v2 ve Cloudflare Turnstile'ı otomatik çözen bir API çağrısı,
  • token'ın kaynak IP ile tutarlı kalmasını sağlayan bir oturum stratejisi olacak.

Mimari: proxy tarar, CaptchaAI çözer

Your Script ──▶ Bright Data Proxy ──▶ Target Site
                                          │
                                    CAPTCHA appears
                                          │
                                    CaptchaAI API ──▶ Solved token
                                          │
                            Inject token ◀─┘

CaptchaAI, isteklerinizi proxy'niz üzerinden geçirmez; çözümü kendi sunucularında, sunucu tarafında yapar. Yani proxy'niz gezinmeyi üstlenir, CaptchaAI ise yalnızca CAPTCHA'ları. Bu ayrım pratikte önemli: IP kaliteniz CAPTCHA'nın ne sıklıkta çıkacağını belirler, CaptchaAI ise çıkan CAPTCHA'yı çözer.


Bright Data proxy türleri ve CAPTCHA tetikleme oranı

Bright Data dört ana IP türü sunar. CAPTCHA açısından kural basittir: IP ne kadar gerçek bir kullanıcıya benziyorsa, doğrulama o kadar seyrek tetiklenir.

Tür IP sayısı Hız Maliyet CAPTCHA oranı
Veri merkezi 770.000+ Hızlı Düşük Yüksek
Konut 72 milyon+ Orta Orta Düşük
ISP 700.000+ Hızlı Yüksek En düşük
Mobil 7 milyon+ Yavaş Yüksek Çok düşük

Pratikte seçim şöyle özetlenebilir:

  • Bütçe önceliğiniz varsa ve site az CAPTCHA çıkarıyorsa Veri merkezi ile başlayın.
  • CAPTCHA yoğun sitelerde varsayılan tercih Konut'tur.
  • Hem hız hem düşük tetikleme istiyorsanız ISP IP'leri iyi bir dengedir.

Önerilen zone (bölge) ayarları

Koda geçmeden önce, CAPTCHA yoğun işler için Bright Data panelinde şu zone yapılandırmasıyla başlamak en az sürprizi verir:

Ayar CAPTCHA için önerilen Neden
Proxy türü Konut En düşük CAPTCHA tetikleme oranı
Ülke hedefleme Hedef sitenin konumuyla eşleştirin IP ile içerik tutarlılığı
Oturum türü Sabit (sticky) Token, kaynak IP ile eşleşmeli
IP kalite filtresi Yüksek kalite İşaretlenmiş IP'lerden kaçının
Maksimum eşzamanlılık 100+ Paralel CAPTCHA iş akışları

Sık karşılaşılan sorunlar ve çözümleri

Entegrasyonu kurarken en çok bu beş durumla karşılaşırsınız:

Sorun Sebep Çözüm
Proxy'den 407 Yanlış kimlik bilgileri Müşteri kimliği, zone ve şifreyi doğrulayın
Her istekte CAPTCHA çıkıyor Veri merkezi IP'si algılandı Konut bölgesine geçin
Token reddedildi Çözüm ile gönderim arasında IP değişti Sabit oturum kullanın
Yavaş yanıt Yoğun çıkış düğümü Daha az yoğun bir ülke/şehir hedefleyin
Bağlantı reddedildi Bant genişliği sınırına ulaşıldı Bright Data panelini kontrol edin

Python ile entegrasyon

İki desen: requests ile HTTP kazıma ve tarayıcı gereken akışlar için Selenium.

Requests + Bright Data + CaptchaAI

import requests
import time

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

# Bright Data proxy credentials
BRIGHT_DATA_PROXY = {
    "http": "http://brd-customer-CUSTOMER_ID-zone-ZONE:PASSWORD@brd.superproxy.io:22225",
    "https": "http://brd-customer-CUSTOMER_ID-zone-ZONE:PASSWORD@brd.superproxy.io:22225",
}


def fetch_with_proxy(url):
    """Fetch a page through Bright Data proxy."""
    resp = requests.get(
        url,
        proxies=BRIGHT_DATA_PROXY,
        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"
        },
        timeout=30,
    )
    return resp


def solve_recaptcha(site_url, sitekey):
    """Solve reCAPTCHA v2 via CaptchaAI."""
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    data = resp.json()
    if data["status"] != 1:
        raise Exception(f"Submit: {data['request']}")

    task_id = data["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":
            continue
        if data["status"] == 1:
            return data["request"]
        raise Exception(f"Solve: {data['request']}")

    raise TimeoutError("Solve timeout")


def solve_turnstile(site_url, sitekey):
    """Solve Cloudflare Turnstile via CaptchaAI."""
    resp = requests.post(f"{CAPTCHAAI_URL}/in.php", data={
        "key": CAPTCHAAI_KEY,
        "method": "turnstile",
        "sitekey": sitekey,
        "pageurl": site_url,
        "json": 1,
    })
    data = resp.json()
    task_id = data["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("Solve timeout")

Selenium + Bright Data + CaptchaAI

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

BRIGHT_DATA_HOST = "brd.superproxy.io"
BRIGHT_DATA_PORT = 22225
BRIGHT_DATA_USER = "brd-customer-CUSTOMER_ID-zone-residential"
BRIGHT_DATA_PASS = "PASSWORD"


def create_driver_with_proxy():
    options = webdriver.ChromeOptions()
    options.add_argument(
        f"--proxy-server=http://{BRIGHT_DATA_HOST}:{BRIGHT_DATA_PORT}"
    )
    options.add_argument("--no-sandbox")
    options.add_argument("--window-size=1920,1080")

    driver = webdriver.Chrome(options=options)
    return driver


def scrape_with_captcha_solving(url, sitekey=None):
    driver = create_driver_with_proxy()

    try:
        driver.get(url)
        time.sleep(3)

        # Auto-detect sitekey if not provided
        if not sitekey:
            sitekey = driver.execute_script(
                "return document.querySelector('[data-sitekey]')"
                "?.getAttribute('data-sitekey')"
            )

        if sitekey:
            token = solve_recaptcha(url, sitekey)

            driver.execute_script(f"""
                document.querySelector('#g-recaptcha-response').value = '{token}';
                document.querySelectorAll('[name="g-recaptcha-response"]')
                    .forEach(el => {{ el.value = '{token}'; }});
            """)

            # Trigger callback
            driver.execute_script("""
                if (typeof ___grecaptcha_cfg !== 'undefined') {
                    const clients = ___grecaptcha_cfg.clients;
                    for (const key in clients) {
                        for (const prop in clients[key]) {
                            const val = clients[key][prop];
                            if (val && typeof val === 'object') {
                                for (const p in val) {
                                    if (typeof val[p]?.callback === 'function') {
                                        val[p].callback(arguments[0]);
                                    }
                                }
                            }
                        }
                    }
                }
            """)

        return driver.page_source

    finally:
        driver.quit()

Ülke bazlı hedefleme ile CAPTCHA oranını düşürme

Bright Data; ülke, eyalet ve şehir düzeyinde hedefleme yapmanıza izin verir. Hedef sitenin kitlesiyle aynı ülkeden çıkan bir IP kullanmak, IP ile içerik arasındaki tutarlılığı artırır ve CAPTCHA tetikleme olasılığını düşürür:

# Country targeting
proxy_us = "http://brd-customer-ID-zone-residential-country-us:PASS@brd.superproxy.io:22225"
proxy_uk = "http://brd-customer-ID-zone-residential-country-gb:PASS@brd.superproxy.io:22225"
proxy_de = "http://brd-customer-ID-zone-residential-country-de:PASS@brd.superproxy.io:22225"

# City targeting
proxy_nyc = "http://brd-customer-ID-zone-residential-country-us-city-newyork:PASS@brd.superproxy.io:22225"

# Use the geo-matched proxy for lower CAPTCHA rates
def scrape_localized(url, country="us"):
    proxy = f"http://brd-customer-ID-zone-residential-country-{country}:PASS@brd.superproxy.io:22225"
    resp = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=30)
    return resp

Örneğin İstanbul'daki bir ekip, kendi tr-TR ödeme akışını yetkili QA testinden geçirirken Türkiye ile eşleşen bir IP seçebilir; test trafiği coğrafi olarak tutarlı görünür. Kazınan veride kişisel bilgi varsa, bunun KVKK kapsamına girdiğini ve yalnızca yetkili iş akışlarında toplanabileceğini unutmayın.


Oturum yönetimi: sabit mi, dönüşümlü mü?

# Sticky session (same IP for entire session)
proxy_sticky = (
    "http://brd-customer-ID-zone-residential"
    "-session-abc123:PASS@brd.superproxy.io:22225"
)

# Rotating (new IP each request)
proxy_rotating = (
    "http://brd-customer-ID-zone-residential:PASS@brd.superproxy.io:22225"
)

İki oturum modelini şöyle ayırın:

  • Sabit (sticky) oturum: CAPTCHA iş akışları için doğru seçim. Token, sayfayı yükleyen IP'ye bağlıdır; çözüp aynı IP'den gönderdiğiniz sürece geçerlidir.
  • Dönüşümlü oturum: Her istekte yeni IP verir. Geniş, CAPTCHA'sız kazıma işlerinde idealdir; ama çözüm ile gönderim arasında IP değişirse token reddedilir.

Pratik kural: token'ı ürettiğiniz ve enjekte ettiğiniz kısa pencerede aynı IP'de kalın.


Node.js ile entegrasyon

Aynı akışın Node.js karşılığı axios ve https-proxy-agent ile şöyle kurulur:

const axios = require("axios");
const https = require("https");

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

const proxyAgent = new (require("https-proxy-agent"))(
  "http://brd-customer-ID-zone-residential:PASS@brd.superproxy.io:22225"
);

async function fetchWithProxy(url) {
  return axios.get(url, {
    httpsAgent: proxyAgent,
    headers: {
      "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/126.0.0.0",
    },
  });
}

async function solveCaptcha(siteUrl, sitekey) {
  const submit = await axios.post(`${CAPTCHAAI_URL}/in.php`, null, {
    params: {
      key: CAPTCHAAI_KEY,
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: siteUrl,
      json: 1,
    },
  });

  const taskId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));

    const result = await axios.get(`${CAPTCHAAI_URL}/res.php`, {
      params: {
        key: CAPTCHAAI_KEY,
        action: "get",
        id: taskId,
        json: 1,
      },
    });

    if (result.data.request === "CAPCHA_NOT_READY") continue;
    if (result.data.status === 1) return result.data.request;
  }

  throw new Error("Timeout");
}

SSS

CaptchaAI, CAPTCHA'yı çözerken Bright Data proxy'mi kullanır mı?

Hayır. CaptchaAI, CAPTCHA'ları kendi altyapısında çözer; proxy'niz yalnızca sayfayı açmak için kullanılır. API'ye yalnızca sayfa URL'sini ve sitekey değerini gönderirsiniz.

CAPTCHA'nın sık çıktığı sitelerde hangi Bright Data IP türü daha iyi?

Konut veya ISP IP'leri. Veri merkezi IP'lerinin CAPTCHA tetikleme olasılığı daha yüksektir. ISP IP'leri, veri merkezi hızını konut IP'lerinin güven düzeyiyle birleştirir.

Token neden "IP değişti" gerekçesiyle reddediliyor?

Çünkü CAPTCHA token'ı, sayfayı yükleyen IP'ye bağlıdır. Sayfa yükleme ile form gönderimi arasında IP'niz döndüyse token geçersiz sayılır. Çözüm: o kısa pencere boyunca sabit oturumda kalın.

Bright Data yerine başka bir proxy ile CaptchaAI çalışır mı?

Evet. CaptchaAI proxy'den bağımsızdır; herhangi bir HTTP/HTTPS proxy sağlayıcısıyla aynı şekilde çalışır. Proxy seçimi yalnızca CAPTCHA'nın ne sıklıkta çıkacağını etkiler, çözüm tarafını değil.

CaptchaAI'nin fiyatı nedir, düşük hacim için uygun mu?

Planlar thread bazlıdır ve thread başına sınırsız çözüm içerir. En düşük plan BASIC ($15/ay, 5 thread) ile başlar; aylık sabit USD fiyatı, kur dalgalanmasından etkilenmeyen öngörülebilir bir maliyet sağlar.


Üretimde nelere dikkat etmeli

Örnekler çalışır durumda olsa da, ölçeğe çıkarken birkaç noktayı baştan planlayın:

  • Thread sayısını iş yükünüze göre seçin. CaptchaAI thread bazlı faturalandırır; eşzamanlı CAPTCHA sayınız kadar thread'e ihtiyacınız var.
  • Zaman aşımı ve yeniden deneme ekleyin. res.php sorgularınıza makul bir zaman aşımı ve üstel geri çekilme (exponential backoff) koyun; geçici hatalarda akış durmasın.
  • IP ile token'ı eşleştirin. Sabit oturumu, çözüm ve gönderim aynı IP'de kalacak biçimde kurun.
  • Yanıt kodlarını izleyin. Proxy'den gelen 407 ve reddedilen token'ları loglayın; bunlar genelde kimlik bilgisi veya IP tutarlılığı sorununa işaret eder.

İlgili rehberler


Bright Data'nın proxy ağını otomatik CAPTCHA çözümüyle birleştirin — CaptchaAI anahtarınızı alın ve otomasyonunuzu ölçeklendirin.

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