Düşük başarı oranının nedenini teşhis etme: adım adım rehber
Başarı oranı (Success Rate) — toplam deneme sayısından başarılı isteklerin yüzdesidir. Bu gösterge normalin altına düştüğünde, para, zaman ve veriler kaybedilir. Ancak nedenleri onlarca olabilir: yanlış yapılandırmadan hedef sunucunun engellemelerine kadar. Bu makalede sistematik bir tanı yaklaşımını inceleyeceğiz ve çözüm bulacağız.
Başarı oranı nedir ve normal değer nedir
Başarı Oranı (SR) = (Başarılı istekler / Toplam istek sayısı) × 100%
Normal değerler görev türüne bağlıdır:
| Görev | Normal SR | Kritik seviye |
|---|---|---|
| Herkese açık verileri ayrıştırma | 95–99% | %85'in altında |
| SMM otomasyonu | 90–97% | %80'in altında |
| Reklam doğrulaması | 98–99.5% | %95'in altında |
| API entegrasyonu | 99–99.9% | %98'in altında |
SR temel seviyenizden %5–10 düşerse — bu tanı yapmanın zamanı gelmiştir. %20 veya daha fazla düşerse — acil işlem gereklidir.
Tanının ilk adımları
Adım 1: Günlükleri ve metrikleri kontrol edin
Son 24–72 saat için veri toplayın:
- SR tam olarak ne zaman düştü? (kesin zaman)
- İsteklerin yüzde kaçı 407 hatası (Proxy Authentication Required) döndürüyor?
- Yüzde kaçı 429 (Çok Fazla İstek)?
- Yüzde kaçı zaman aşımı (connection timeout)?
- Yük değişti mi (RPS — saniye başına istek)?
Adım 2: İzole olarak test edin
Uygulamanız olmadan proxy'yi kontrol etmek için basit bir komut dosyası kullanın:
import requests
import time
proxy = "http://proxy_ip:port"
proxies = {"http": proxy, "https": proxy}
target_url = "https://httpbin.org/ip"
success = 0
failed = 0
for i in range(100):
try:
response = requests.get(
target_url,
proxies=proxies,
timeout=10,
verify=False
)
if response.status_code == 200:
success += 1
print(f"✓ Deneme {i+1}: başarılı")
else:
failed += 1
print(f"✗ Deneme {i+1}: durum {response.status_code}")
except Exception as e:
failed += 1
print(f"✗ Deneme {i+1}: {str(e)}")
time.sleep(0.5)
sr = (success / (success + failed)) * 100
print(f"\nBaşarı Oranı: {sr:.1f}%")
print(f"Başarılı: {success}, Hatalar: {failed}")
Bu test normal SR gösterirse — sorun kodunuzda veya yapılandırmanızda. SR burada da düşükse — sorun proxy'de veya hedef sunucuda.
Proxy tarafındaki sorunlar
Hata 407: Proxy Kimlik Doğrulaması Gerekli
Nedenler:
- Yanlış kimlik bilgileri (kullanıcı adı/şifre)
- Hesap süresi doldu
- IP adresi beyaz listeye dahil değil (gerekiyorsa)
- IP rotasyonu çalışmıyor veya devre dışı
Çözüm:
import requests
# Konut proxy'leri için doğru format
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}
# Test
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)
Proxy sunucusunun aşırı yüklenmesi
Hizmetin tüm kullanıcıları aynı anda çok sayıda istek gönderirse, RPS (saniye başına istek) sınırlaması olabilir. Bu nadirdir, ancak olur.
Kontrol edin:
- Mevcut RPS'niz en yüksek seviyede
- Tarife limitleri
- Günlüklerde 429 hatası var mı
Çözüm: istekler arasına gecikme ekleyin veya tarifenizi yükseltin.
IP adreslerinin kalitesi
Konut proxy'leri için düşük SR, size engellenen adresleri döndürdükleri anlamına gelebilir. Kontrol edin:
- IP adreslerinin yüzde kaçı 403 Yasak döndürüyor?
- Aynı adresler tekrar ediliyor mu?
- Bir desen var mı — bir ülke/bölge çalışıyor, diğeri değil mi?
Hedef sunucunun engelleri ve filtreleri
Hata 429: Çok Fazla İstek
Hedef sunucu tek bir IP'den veya genel olarak çok fazla istek görüyor. Çözümler:
- Gecikme ekleyin: `time.sleep(random.uniform(1, 3))`
- IP rotasyonu kullanın: her istek — yeni IP
- RPS'yi düşürün: istekleri paralel değil, sırayla gönderin
- Gerçekçi başlıklar ekleyin: User-Agent, Referer, Accept-Language
Hata 403 Yasak
Sunucu IP'nizi (veya proxy IP'sini) engelledi. Bu şu olabilir:
- Coğrafi konum filtresi
- Proxy hizmetlerinin kara listesi
- Bot dedektörü (JavaScript, CAPTCHA)
Çözüm: mobil proxy'ler veya konut proxy'leri rotasyonla kullanın. Engellenmesi daha zordur.
Hata 403: User-Agent Kontrolü
Bazı hizmetler şüpheli User-Agent'lar ile istekleri reddeder:
import requests
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15"
]
headers = {
"User-Agent": random.choice(user_agents),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
"Referer": "https://google.com"
}
response = requests.get(
"https://target-site.com",
headers=headers,
proxies={"http": proxy, "https": proxy},
timeout=10
)
print(response.status_code)
İstemci kodundaki hatalar
Yanlış istisna işleme
Yaygın hata: kod bağlantı hatasını başarısız istek olarak sayar, ancak yeniden bağlanmaya çalışmaz:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Yeniden denemelerle doğru yol
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
try:
response = session.get(url, proxies=proxies, timeout=10)
except requests.exceptions.RequestException as e:
print(f"Hata: {e}")
# Günlüğe kaydedip sonraki isteğe geçin
Yanlış zaman aşımları
Zaman aşımı çok kısa ise (1–2 saniye), yavaş proxy'ler reddedilecektir:
- Normal ayrıştırma için: 10–30 saniye
- Mobil proxy'ler için: 15–45 saniye
- API için: 5–10 saniye
SSL/TLS hataları
`verify=False` kullanırsanız, bu gerçek sorunları maskeleyebilir. Sertifikaları güncellenmesi daha iyidir:
import requests
import certifi
# Doğru
response = requests.get(
url,
proxies=proxies,
verify=certifi.where(), # verify=False yerine
timeout=15
)
Ağ sorunları ve zaman aşımları
Bağlantı zaman aşımı vs Okuma zaman aşımı
Fark önemlidir:
- Bağlantı zaman aşımı: proxy yanıt vermiyor (proxy veya ağ sorunu)
- Okuma zaman aşımı: hedef sunucu yavaş veri gönderiyor (hedef sunucu sorunu)
import requests
# timeout = (connection_timeout, read_timeout)
try:
response = requests.get(
url,
proxies=proxies,
timeout=(5, 15) # 5 sn bağlantı, 15 sn okuma
)
except requests.exceptions.ConnectTimeout:
print("Proxy yanıt vermiyor")
except requests.exceptions.ReadTimeout:
print("Hedef sunucu yavaş")
DNS sorunları
Hedef sunucu çözümlenirse, bu proxy hatası değildir:
import socket
# Proxy olmadan DNS kontrol edin
try:
ip = socket.gethostbyname("target-site.com")
print(f"Çözümlendi: {ip}")
except socket.gaierror:
print("DNS hatası — site bulunamadı")
Düşük SR tanı kontrol listesi
- Temel seviyeyi belirleyin: daha önce normal SR neydi?
- İzole test çalıştırın (yukarıdaki komut dosyası) 100 istekle
- Günlükleri kontrol edin: hangi HTTP kodları baskın? (407, 429, 403, zaman aşımı?)
- 407 ise: kullanıcı adı/şifre ve IP beyaz listesini kontrol edin
- 429 ise: istekler arasına gecikme ekleyin, IP rotasyonu kullanın
- 403 ise: User-Agent, Referer kontrol edin, gerçekçi başlıklar ekleyin
- Zaman aşımı ise: zaman aşımını artırın, RPS kontrol edin, yeniden deneme mantığı kullanın
- Kodunuzu kontrol edin: doğru istisna işleme, doğru zaman aşımları
- Hedef sunucuyu kontrol edin: proxy olmadan erişilebilir mi?
- Diğer her şey başarısız olursa: farklı proxy türü veya farklı sağlayıcı deneyin
Hızlı tanı tablosu
| HTTP kodu | Muhtemel neden | Çözüm |
|---|---|---|
| 407 | Yanlış proxy kimlik bilgileri | Kullanıcı adı/şifre, IP beyaz listesini kontrol edin |
| 429 | Çok fazla istek | Gecikme ekleyin, IP rotasyonu kullanın |
| 403 | IP engellendi veya bot dedektörü | Gerçekçi başlıklar ekleyin, mobil proxy'ler kullanın |
| Zaman aşımı | Proxy yavaş veya hedef sunucu aşırı yüklü | Zaman aşımını artırın, RPS kontrol edin |
| Bağlantı reddedildi | Proxy sunucusu erişilemez | IP:port kontrol edin, proxy durumunu kontrol edin |
Özet
Düşük başarı oranı — bu bir semptom, hastalık değil. Nedenleri çok olabilir: kodda yazım hatasından hedef sunucu tarafından engellemeye kadar. Sistematik tanı — çözümün anahtarıdır:
- Metrikleri ve günlükleri kontrol edin
- Sorunu izole edin (proxy vs hedef sunucu vs kodunuz)
- Hata türünü belirleyin (407, 429, 403, zaman aşımı)
- İlgili çözümü uygulayın
Güvenilirlik ve yüksek SR gerektiren görevler için, IP rotasyonlu konut proxy'leri önerilir. Tespit edilmesi daha zordur ve daha istikrarlıdır. proxycove.com üzerinde ücretsiz test deneyin ve görevinizde test edin.