Bloga geri dön

Proxy Yanlış Veri Döndürüyor: Nedenler ve Çözümler

Proxy'nin yanlış veri döndürmesinin tipik nedenlerini, önbelleklemeden coğrafi konum sorunlarına kadar inceliyoruz. Her durum için pratik çözümler.

📅12 Aralık 2025
```html

Proxy Yanlış Veri Döndürüyor: Nedenler ve Çözümler

Bir kazıma (parser) programı kurdunuz, veri toplamayı başlattınız, ancak sonuç olarak başka bir bölgeye ait fiyatlar, güncel olmayan içerik veya tamamen farklı bir sayfa görüyorsunuz. Proxy'nin neden yanlış veriler döndürebileceğini ve bunu nasıl düzeltebileceğinizi inceleyelim.

1. Proxy Tarafında Önbellekleme (Caching)

Eski verilerin alınmasının en yaygın nedeni önbelleklemedir. Bazı proxy sunucuları, yükü azaltmak ve performansı artırmak için web sitesi yanıtlarını kaydeder. Sonuç olarak, güncel veriler yerine bir haftalık verileri alırsınız.

Sorunu Nasıl Tespit Edersiniz?

  • Tekrarlanan isteklerde veriler değişmiyor
  • Fiyatlar veya stok durumu gerçek durumu yansıtmıyor
  • Yanıttaki Age başlığı yüksek bir değer gösteriyor

Çözüm

Önbelleklemeyi yasaklayan başlıklar ekleyin:

import requests

headers = {
    'Cache-Control': 'no-cache, no-store, must-revalidate',
    'Pragma': 'no-cache',
    'Expires': '0'
}

response = requests.get(
    'https://example.com/prices',
    proxies={'http': proxy, 'https': proxy},
    headers=headers
)

Eğer sağlayıcı yine de önbellekliyorsa, URL'ye rastgele bir parametre ekleyin:

import time

url = f'https://example.com/prices?_nocache={int(time.time())}'

2. Coğrafi Konum (Geolocation) Uyuşmazlığı

Almanya'dan bir proxy talep ediyorsunuz ama sonuç olarak ruble cinsinden fiyatlar alıyorsunuz. Veya Rusya verilerine ihtiyacınız var ama site ABD içeriği gösteriyor. Bunun birkaç nedeni olabilir.

Coğrafi Konum Neden Uyuşmuyor?

Neden Açıklama
Eski GeoIP Veritabanları IP yakın zamanda başka bir bölgeye taşındı, ancak veritabanları henüz güncellenmedi
Site Kendi Veritabanını Kullanıyor Hedef site, proxy sağlayıcısından farklı bir coğrafi konum belirleme yöntemi kullanıyor
Önceki Oturumun Çerezleri Site, önceki ziyaretinizden bölgenizi hatırlıyor
Accept-Language Dil başlığı, proxy coğrafyasıyla eşleşmiyor

Çözüm

İstek parametrelerini istenen coğrafi konumla senkronize edin:

# Alman sitesi için kazıma
headers = {
    'Accept-Language': 'de-DE,de;q=0.9,en;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
}

# Çerezsiz temiz oturum
session = requests.Session()
session.cookies.clear()

response = session.get(
    'https://example.de/preise',
    proxies={'http': german_proxy, 'https': german_proxy},
    headers=headers
)

Kazımadan önce IP'nin gerçek coğrafi konumunu kontrol edin:

def check_proxy_geo(proxy):
    response = requests.get(
        'http://ip-api.com/json/',
        proxies={'http': proxy, 'https': proxy},
        timeout=10
    )
    data = response.json()
    return data.get('country'), data.get('city')

3. IP Rotasyonu Sorunları

Otomatik IP rotasyonu özelliğine sahip rezidansiyel proxy'ler kullanıldığında, IP'ler istekler arasında değişir. Bu, limitleri aşmayı önlemek için faydalı olsa da, veri tutarlılığı gerektiğinde sorun yaratır.

Tipik Belirtiler

  • Sayfalama (pagination) yinelenen öğeler döndürür veya bazılarını atlar
  • Sepet, istekler arasında temizlenir
  • Oturum ortasında kimlik doğrulama düşer
  • A/B testleri sitenin farklı sürümlerini gösterir

Çözüm: Yapışkan Oturumlar (Sticky Sessions)

Çoğu proxy sağlayıcısı, IP'yi belirli bir süre koruyan "yapışkan oturumları" destekler. Bu genellikle bağlantı dizesindeki bir parametreyle ayarlanır:

# Oturum kimliği içeren format örneği (sözdizimi sağlayıcıya bağlıdır)
proxy = 'http://user-session-abc123:pass@gate.provider.com:7777'

# Tek bir IP üzerinden giden tüm istekler
for page in range(1, 10):
    response = requests.get(
        f'https://example.com/catalog?page={page}',
        proxies={'http': proxy, 'https': proxy}
    )

Önemli: Yapışkan oturumlar genellikle 1-30 dakika sürer. Veri toplama işlemlerinizi bu süre aralığına sığacak şekilde planlayın.

4. Oturum (Session) ve Çerez (Cookie) İhlalleri

Modern web siteleri kişiselleştirme için yoğun olarak çerezler kullanır. Kazıma programınız bunları doğru işlemezse, yanlış veriler alırsınız veya tamamen engellenirsiniz.

Sık Yapılan Hatalar

  1. Set-Cookie'yi Yoksayma - Site oturumu takip edemez
  2. Farklı IP ile Çerez Kullanımı - Şüpheli davranışa yol açar
  3. Başlangıç İsteğinin Eksikliği - Doğrudan iç sayfaya gitmek, ana sayfadan "giriş" yapmadan

Doğru Yaklaşım

import requests

def create_browser_session(proxy):
    session = requests.Session()
    session.proxies = {'http': proxy, 'https': proxy}
    
    # İlk ziyareti taklit etme - çerezleri alma
    session.get('https://example.com/', headers={
        'User-Agent': 'Mozilla/5.0...',
        'Accept': 'text/html,application/xhtml+xml...',
        'Accept-Language': 'en-US,en;q=0.9'
    })
    
    # Artık geçerli bir oturumla kazıma yapılabilir
    return session

session = create_browser_session(proxy)
data = session.get('https://example.com/api/prices').json()

5. Kodlama ve Sıkıştırma Hataları

Bazen veriler doğru gelir ancak kodlama veya sıkıştırma sorunları nedeniyle yanlış görüntülenir. Özellikle Kiril alfabesi ve Asya dilleriyle çalışırken bu durum sıkça görülür.

Belirtiler

  • Metin yerine garip karakterler: Цена yerine «Цена»
  • Gzip etkinleştirildiğinde boş yanıt
  • HTML yerine ikili çöp

Çözüm

import requests

response = requests.get(url, proxies=proxies)

# Yöntem 1: Kodlamayı otomatik algılama
response.encoding = response.apparent_encoding
text = response.text

# Yöntem 2: Kodlamayı zorlama
text = response.content.decode('utf-8')

# Yöntem 3: Sıkıştırmayı devre dışı bırakma (eğer proxy gzip'i bozuyorsa)
headers = {'Accept-Encoding': 'identity'}
response = requests.get(url, proxies=proxies, headers=headers)

6. Gizli Engellemeler ve Captcha'lar

Her engelleme açıkça görünmez. Site, HTTP 200 kodu döndürmesine rağmen, gerçek veriler yerine bir yer tutucu, eski önbellek veya normal HTML içine yerleştirilmiş bir captcha sayfası sunabilir.

Gizli Engellemenin İşaretleri

  • Yanıt boyutu şüpheli derecede küçük veya farklı sayfalar için aynı
  • HTML içinde şu kelimeler bulunuyor: captcha, challenge, blocked, access denied
  • Beklenen öğelerin (fiyatlar, açıklamalar, düğmeler) olmaması
  • Başka bir sayfaya JavaScript yönlendirmesi

Yanıt Doğrulaması

def is_valid_response(response, expected_markers):
    """Yanıtın gerçek veri içerip içermediğini kontrol eder"""
    
    text = response.text.lower()
    
    # Engelleme sinyallerini kontrol etme
    block_signals = ['captcha', 'blocked', 'access denied', 
                     'rate limit', 'try again later']
    for signal in block_signals:
        if signal in text:
            return False, f'Engellendi: {signal}'
    
    # Beklenen verilerin varlığını kontrol etme
    for marker in expected_markers:
        if marker.lower() not in text:
            return False, f'Eksik: {marker}'
    
    # Boyut kontrolü (çok küçükse = yer tutucu)
    if len(response.content) < 5000:
        return False, 'Yanıt çok küçük'
    
    return True, 'OK'

# Kullanım
valid, reason = is_valid_response(response, ['price', 'add to cart'])
if not valid:
    print(f'Geçersiz yanıt: {reason}')
    # Proxy değiştir, bekle, tekrar dene

Ciddi bot korumasına sahip siteler için, veri merkezlerinden ziyade mobil proxy'ler daha yüksek güvenilirlik düzeyi sunar.

7. Adım Adım Teşhis

Proxy yanlış veri döndürdüğünde, sorunun kaynağını hızlıca bulmak için şu algoritmayı kullanın:

Adım 1: Sorunu İzolasyon

# Yanıtları karşılaştır: proxy'siz vs proxy'li
def compare_responses(url, proxy):
    direct = requests.get(url)
    proxied = requests.get(url, proxies={'http': proxy, 'https': proxy})
    
    print(f'Doğrudan:  {len(direct.content)} bayt, durum kodu {direct.status_code}')
    print(f'Proxy ile: {len(proxied.content)} bayt, durum kodu {proxied.status_code}')
    
    # Karşılaştırma için her iki yanıtı da kaydedin
    with open('direct.html', 'w') as f:
        f.write(direct.text)
    with open('proxied.html', 'w') as f:
        f.write(proxied.text)

Adım 2: Yanıt Başlıklarını Kontrol Edin

response = requests.get(url, proxies=proxies)

# Teşhis için önemli başlıklar
important_headers = ['content-type', 'content-encoding', 
                     'cache-control', 'age', 'x-cache', 
                     'cf-ray', 'server']

for header in important_headers:
    value = response.headers.get(header, 'ayarlanmadı')
    print(f'{header}: {value}')

Adım 3: Kontrol Listesi

Kontrol Komut/Metot
Proxy'nin Gerçek IP'si curl -x proxy:port ifconfig.me
IP Coğrafi Konumu ip-api.com/json
Önbellekleme Age, X-Cache başlıkları
Engelleme HTML içinde "captcha", "blocked" araması
Kodlama Content-Type charset

Adım 4: Tam Teşhis Betiği

import requests
import json

def diagnose_proxy(proxy, target_url):
    report = {}
    
    # 1. Çalışma Durumu Kontrolü
    try:
        r = requests.get('http://httpbin.org/ip', 
                        proxies={'http': proxy, 'https': proxy},
                        timeout=15)
        report['proxy_ip'] = r.json().get('origin')
        report['proxy_works'] = True
    except Exception as e:
        report['proxy_works'] = False
        report['error'] = str(e)
        return report
    
    # 2. Coğrafi Konum
    r = requests.get('http://ip-api.com/json/',
                    proxies={'http': proxy, 'https': proxy})
    geo = r.json()
    report['country'] = geo.get('country')
    report['city'] = geo.get('city')
    
    # 3. Hedef Siteye İstek
    r = requests.get(target_url,
                    proxies={'http': proxy, 'https': proxy},
                    timeout=30)
    report['status_code'] = r.status_code
    report['content_length'] = len(r.content)
    report['cached'] = 'age' in r.headers or 'x-cache' in r.headers
    
    # 4. Engelleme Kontrolü
    block_words = ['captcha', 'blocked', 'denied', 'cloudflare']
    report['possibly_blocked'] = any(w in r.text.lower() for w in block_words)
    
    return report

# Kullanım
result = diagnose_proxy('http://user:pass@proxy:port', 'https://target-site.com')
print(json.dumps(result, indent=2))

Sonuç

Proxy'den gelen yanlış veriler neredeyse her zaman çözülebilir bir sorundur. Çoğu durumda neden önbellekleme, coğrafi konum uyuşmazlığı veya oturum yönetimi hatalarından kaynaklanır. Sorunun kaynağını hızlıca bulmak için bu makaledeki teşhis betiğini kullanın.

Coğrafi konum doğruluğunun ve düşük engellenme oranının kritik olduğu görevler için, yapışkan oturumları destekleyen rezidansiyel proxy'ler en uygunudur — daha fazla bilgi için proxycove.com adresini ziyaret edin.

```