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.