Eğitimler

Daha Hızlı CAPTCHA API Çağrıları için Bağlantıyı Canlı Tutma ve HTTP/2

Her CAPTCHA çözümü birden fazla HTTP isteği içerir: bir gönderme ve 3-10 yoklama. Bağlantının yeniden kullanımı olmadan, her istek yeni bir TCP anlaşmasının ve TLS anlaşmasının maliyetini (bağlantı başına 100-300 ms) öder. Bu kılavuz, canlı tutma bağlantılarını ve HTTP/2 çoğullamayı kullanarak bu ek yükün nasıl ortadan kaldırılacağını gösterir.CaptchaAI.

Bağlantının Yeniden Kullanımı Neden Önemlidir?

Tipik bir reCAPTCHA v2 çözümü şunları gerektirir:

  • 1 isteği in.php'ye gönder
  • res.php'ye 4-6 anket isteği
  • Toplam: 5–7 HTTP isteği

Canlı tutma olmadan:

  • 5 × (TCP anlaşması ~50ms + TLS ~100ms) = 750ms ek yük

Canlı tutma özelliğiyle:

  • 1 × (TCP + TLS) + 4 × (~5 ms yeniden kullanım) = 170 ms ek yük

Tasarruf: Çözüm başına ~580 ms. 10.000 çözüm/day'de, bu 1,6 saatlik gecikme tasarrufu demektir.

Python: request.Session'ı kullanma

requests kitaplığı, bir Session nesnesi kullandığınızda varsayılan olarak canlı tutmayı destekler:

# keepalive_solver.py
import os
import time
import requests

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

# Create a session — reuses TCP connections across requests
session = requests.Session()
session.headers.update({"Connection": "keep-alive"})

def solve_captcha(sitekey, pageurl):
    """Solve reCAPTCHA v2 using a persistent connection."""
    # Submit — uses existing connection if available
    resp = session.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": "1",
    })
    result = resp.json()

    if result.get("status") != 1:
        raise Exception(f"Submit failed: {result.get('request')}")

    task_id = result["request"]

    # Poll — reuses the same connection
    time.sleep(15)
    for _ in range(25):
        poll = session.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": task_id,
            "json": "1",
        })
        poll_result = poll.json()

        if poll_result.get("status") == 1:
            return poll_result["request"]
        if poll_result.get("request") != "CAPCHA_NOT_READY":
            raise Exception(f"Error: {poll_result.get('request')}")

        time.sleep(5)

    raise Exception("Timeout")

# Solve multiple CAPTCHAs reusing the same connection
for i in range(5):
    token = solve_captcha(
        "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
        "https://www.google.com/recaptcha/api2/demo"
    )
    print(f"Solve {i+1}: {token[:30]}...")

Python: httpx ile HTTP/2

HTTP/2 desteği için httpx'yi kullanın:

# http2_solver.py
import os
import time
import httpx

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
BASE_URL = "https://ocr.captchaai.com"

# HTTP/2 client with connection pooling
client = httpx.Client(http2=True, timeout=30.0)

def solve_captcha(sitekey, pageurl):
    """Solve using HTTP/2 multiplexed connections."""
    resp = client.get(f"{BASE_URL}/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": "1",
    })
    result = resp.json()

    if result.get("status") != 1:
        raise Exception(f"Submit failed: {result.get('request')}")

    task_id = result["request"]
    time.sleep(15)

    for _ in range(25):
        poll = client.get(f"{BASE_URL}/res.php", params={
            "key": API_KEY, "action": "get",
            "id": task_id, "json": "1",
        })
        poll_result = poll.json()

        if poll_result.get("status") == 1:
            return poll_result["request"]
        if poll_result.get("request") != "CAPCHA_NOT_READY":
            raise Exception(f"Error: {poll_result.get('request')}")

        time.sleep(5)

    raise Exception("Timeout")

# Multiple solves over a single HTTP/2 connection
for i in range(5):
    token = solve_captcha(
        "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-",
        "https://www.google.com/recaptcha/api2/demo"
    )
    print(f"Solve {i+1}: {token[:30]}...")

client.close()

JavaScript: Keep-Alive ile Axios Örneğini Kullanma

// keepalive_solver.js
const axios = require('axios');
const http = require('http');
const https = require('https');

const API_KEY = process.env.CAPTCHAAI_KEY || 'YOUR_API_KEY';

// Create agents with keep-alive enabled
const httpAgent = new http.Agent({ keepAlive: true, maxSockets: 10 });
const httpsAgent = new https.Agent({ keepAlive: true, maxSockets: 10 });

// Axios instance with persistent connections
const api = axios.create({
  baseURL: 'https://ocr.captchaai.com',
  httpAgent,
  httpsAgent,
  timeout: 30000,
});

async function solveCaptcha(sitekey, pageurl) {
  // Submit — reuses connection
  const submit = await api.get('/in.php', {
    params: {
      key: API_KEY, method: 'userrecaptcha',
      googlekey: sitekey, pageurl, json: '1',
    },
  });

  if (submit.data.status !== 1) throw new Error(submit.data.request);
  const taskId = submit.data.request;

  // Poll — reuses same connection
  await new Promise(r => setTimeout(r, 15000));
  for (let i = 0; i < 25; i++) {
    const poll = await api.get('/res.php', {
      params: { key: API_KEY, action: 'get', id: taskId, json: '1' },
    });

    if (poll.data.status === 1) return poll.data.request;
    if (poll.data.request !== 'CAPCHA_NOT_READY') throw new Error(poll.data.request);
    await new Promise(r => setTimeout(r, 5000));
  }
  throw new Error('Timeout');
}

(async () => {
  for (let i = 0; i < 5; i++) {
    const token = await solveCaptcha(
      '6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
      'https://www.google.com/recaptcha/api2/demo'
    );
    console.log(`Solve ${i + 1}: ${token.slice(0, 30)}...`);
  }

  // Clean up agents
  httpAgent.destroy();
  httpsAgent.destroy();
})();

CAPTCHA Çözme için HTTP/2 ve HTTP/1.1 karşılaştırması

Özellik HTTP/1.1 Canlı Tutma HTTP/2
Bağlantının yeniden kullanımı Evet (sıralı) Evet (çoklanmış)
Eşzamanlı akışlar Bağlantı başına 1 Bağlantı başına 100'den fazla
Başlık sıkıştırması Hayır HPACK sıkıştırması
Gecikme azaltma ~%60 ~%70
Tarayıcı desteği gerekli Hayır Hayır (API çağrıları)
Şunun için en iyisi: Sıralı çözümler Paralel çözümler

Sıralı çözüm için (her seferinde bir CAPTCHA), HTTP/1.1 canlı tutma yeterlidir. Paralel çözümleme için (aynı anda birden fazla CAPTCHA), HTTP/2 çoğullaması tek bir bağlantıyı paylaşarak ek fayda sağlar.

Bağlantı Havuzu Boyutlandırması

Havuz boyutunuzu eşzamanlılık seviyenizle eşleştirin:

Eşzamanlı çözümler Önerilen havuz boyutu
1-5 5 bağlantı
5-20 10 bağlantı
20–50 25 bağlantı
50-100 50 bağlantı
100+ HTTP/2 kullanın (1 bağlantı)

Büyük havuzlar hafızayı boşa harcar. Küçük boyutlu havuzlar yeni bağlantıları zorlayarak canlı tutma avantajlarını ortadan kaldırır.

Sorun giderme

Sorun Sebep Düzeltme
Foot Lockerlar arasında bağlantılar kapanıyor Sunucu veya proxy zaman aşımı İstemci yapılandırmasında keep-alive zaman aşımını > 30 saniye olarak ayarlayın
Performans artışı yok Zaten canlı tutma kullanılıyor (bazı kitaplıklarda varsayılan) Ağ izleme araçlarıyla doğrulama
Bağlantı reddedildi hataları Havuz bitti maxSockets'yi artırın veya eşzamanlılığı azaltın
HTTP/2 üzerinde anlaşmaya varılmadı Sunucu h2'yi desteklemiyor HTTP/1.1 canlı tutma yöntemine geri dönün

SSS

CaptchaAI, HTTP/2'yi destekliyor mu?

Doğrulamak için curl --http2 https://ocr.captchaai.com/res.php ile test edin. Sunucu h2 ile anlaşırsa HTTP/2 istemciniz bundan faydalanacaktır. Değilse, HTTP/1.1 canlı tutma yöntemine geri dönün.

Her gruptan sonra oturumları kapatmalı mıyım?

Hayır. Periyodik çözümler çalıştırıyorsanız oturumları gruplar arasında açık tutun. Yalnızca uygulamanız kapandığında kapatın.

Bu proxy sunucularda çalışır mı?

Evet, ancak proxy'nizin canlı tutmayı ve HTTP/2.'yi de desteklemesi gerekir. Bazı SOCKS5 proxy'leri kalıcı bağlantıları sürdürmez.

İlgili Makaleler

Sonraki Adımlar

Her çözümde bağlantı yükünü azaltın —CaptchaAI API anahtarınızı alın.

İlgili kılavuzlar:

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