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: