Bloga geri dön

Proxy Aracılığıyla Cookie Sorunlarını Çözme Rehberi

Cookies, proxy üzerinden çalışırken sıklıkla sorun kaynağı olur. Bunun neden olduğunu ve doğru şekilde nasıl yapılandırılacağını öğrenin.

📅8 Aralık 2025
```html

Proksiler aracılığıyla cookies sorunlarını nasıl düzeltilir

Cookies, proksiler ile çalışırken en sık hata kaynaklarından biridir. Oturumlar kesiliyor, yetkilendirme bozuluyor, veriler kayboluyor. Bu makalede bunun neden olduğunu ve stabil çalışma için cookies işlemesini doğru şekilde nasıl yapılandıracağınızı öğreneceğiz.

Proksiler kullanırken cookies neden kaybolur

İsteği bir proksiler aracılığıyla gönderdiğinizde, istemciniz ile hedef sunucu arasına ara bir düğüm yerleşir. Bu birkaç sorunu yaratır:

  • Aynı oturum için farklı IP adresleri. Sunucu, isteklerin farklı adreslerden geldiğini fark edebilir ve cookies'leri şüpheli olarak reddedebilir.
  • Set-Cookie başlıklarının kaybı. Yanlış proksiler yapılandırması, Set-Cookie başlıklarını istemciye iletmeyebilir.
  • Etki alanı ve yol uyuşmazlığı. Proksiler Host başlığını yeniden yazarsa, etki alanı uyuşmazlığı nedeniyle cookies kaydedilmeyebilir.
  • Durum kaydının olmaması. Her isteği cookies kaydı olmadan ayrı ayrı gönderirseniz, oturum kaybolur.

Cookie jar, cookies'leri otomatik olarak yöneten bir depolama alanıdır. Her isteğe Cookie başlığını manuel olarak eklemenin yerine, kütüphanenin bunu otomatik olarak yapmasına izin verirsiniz.

Çoğu HTTP istemcisinin yerleşik cookie jar desteği vardır:

import requests
from requests.cookies import RequestsCookieJar

# Cookies depolamak için jar oluşturuyoruz
jar = RequestsCookieJar()

# İlk istek — sunucu Set-Cookie gönderecek
response1 = requests.get(
    'https://example.com/login',
    cookies=jar,
    proxies={'https': 'http://proxy.example.com:8080'}
)

# Cookies otomatik olarak jar'da kaydedildi
print(jar)

# İkinci istek — cookies otomatik olarak gönderilecek
response2 = requests.get(
    'https://example.com/dashboard',
    cookies=jar,
    proxies={'https': 'http://proxy.example.com:8080'}
)

Jar olmadan Set-Cookie'yi manuel olarak ayrıştırıp sonraki isteğe eklemeniz gerekir — bu güvenilmez ve hantaldır.

Cookies'leri istekler arasında kaydetme

Komut dosyanız uzun süre çalışıyorsa veya yeniden yükleme sonrasında oturumu kurtarmanız gerekiyorsa, cookies'leri dosyaya kaydedin:

import requests
from http.cookiejar import LWPCookieJar

# Dosyaya kaydetme ile jar oluşturuyoruz
jar = LWPCookieJar('cookies.txt')

# Eski cookies varsa yüklüyoruz
try:
    jar.load(ignore_discard=True, ignore_expires=True)
except FileNotFoundError:
    pass

# Isteklerde jar'ı kullanıyoruz
response = requests.get(
    'https://example.com/login',
    cookies=jar,
    proxies={'https': 'http://proxy.example.com:8080'}
)

# Güncellenmiş cookies'leri kaydediyoruz
jar.save(ignore_discard=True, ignore_expires=True)

ignore_discard=True ve ignore_expires=True bayrakları geçici cookies'leri bile kaydetmenizi sağlar.

Cookies etki alanı bağlantısı sorunları

Cookies'lerin hangi etki alanları için gönderileceğini belirleyen bir Domain özniteliği vardır. Sorunlar şu durumlarda ortaya çıkar:

  • Proksiler Host'u yeniden yazıyor. Proksiler Host başlığını değiştirirse, cookie jar, cookie'yi başka bir etki alanına ait olarak reddedebilir.
  • Alt etki alanları uyuşmuyor. example.com için cookie, api.example.com'e gönderilmeyebilir.
  • Yol uyuşmuyor. /api için cookie, /admin'e gönderilmez.

Cookie özniteliklerini şu şekilde kontrol edin:

import requests

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

# Tüm cookies'leri yazdırıyoruz
for cookie in response.cookies:
    print(f"Name: {cookie.name}")
    print(f"Value: {cookie.value}")
    print(f"Domain: {cookie.domain}")
    print(f"Path: {cookie.path}")
    print(f"Secure: {cookie.secure}")
    print(f"HttpOnly: {cookie.has_nonstandard_attr('HttpOnly')}")
    print("---")

Domain çok dar ise, otomatik yönetim yerine cookies'leri açıkça belirtmeyi deneyin:

headers = {
    'Cookie': 'session_id=abc123; user_token=xyz789'
}

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

Secure ve HttpOnly bayrakları

Secure bayrağı, cookie'nin yalnızca HTTPS üzerinden gönderildiği anlamına gelir. HTTP proksisini HTTPS kaynağına erişmek için kullanıyorsanız, proksiye bağlantının korunduğundan veya proksinin HTTPS'yi doğru şekilde ilettiğinden emin olun.

HttpOnly bayrağı, JavaScript'ten cookie'ye erişimi yasaklar. Bu, isteklerde cookie gönderimini etkilemez, ancak tarayıcıdan bu tür cookies'leri okuyamayacağınızı hatırlamak önemlidir.

Konut proksilerini kullanırken şunları kontrol edin:

  • Proksiler HTTPS'yi destekliyor (CONNECT yöntemi)
  • Sertifikalar geçerli (verify=False üretimde kullanmayın)
  • Başlıklar proksiler tarafından yeniden yazılmıyor

Kod örnekleri ile pratik uygulamalar

Örnek 1: Oturum kaydı ile giriş

import requests
from requests.cookies import RequestsCookieJar

jar = RequestsCookieJar()
proxy = 'http://proxy.example.com:8080'

# Giriş
login_response = requests.post(
    'https://example.com/login',
    data={'username': 'user', 'password': 'pass'},
    cookies=jar,
    proxies={'https': proxy}
)

if login_response.status_code == 200:
    print("Giriş başarılı")
    
    # Kaydedilmiş oturumu kullanıyoruz
    dashboard = requests.get(
        'https://example.com/dashboard',
        cookies=jar,
        proxies={'https': proxy}
    )
    print(dashboard.text)

Örnek 2: Birden fazla isteği işleme

import requests
from http.cookiejar import LWPCookieJar
import time

jar = LWPCookieJar('session.txt')
try:
    jar.load(ignore_discard=True)
except:
    pass

proxy = 'http://proxy.example.com:8080'
urls = [
    'https://example.com/page1',
    'https://example.com/page2',
    'https://example.com/page3'
]

for url in urls:
    response = requests.get(
        url,
        cookies=jar,
        proxies={'https': proxy},
        timeout=10
    )
    print(f"{url}: {response.status_code}")
    jar.save(ignore_discard=True)
    time.sleep(1)  # Sunucuyu aşırı yüklemeyin

Örnek 3: Sorunlar olduğunda açık cookies iletimi

import requests

proxy = 'http://proxy.example.com:8080'

# Otomatik yönetim çalışmazsa
cookies_dict = {
    'session_id': 'abc123def456',
    'user_pref': 'dark_mode'
}

headers = {
    'User-Agent': 'Mozilla/5.0...',
    'Cookie': '; '.join([f"{k}={v}" for k, v in cookies_dict.items()])
}

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

print(response.json())

Cookies sorunlarının hata ayıklaması

Cookies çalışmazsa, bu araçları kullanın:

Araç Amaç
requests.Session Oturumdaki tüm istekler için cookies'leri otomatik olarak yönetir
logging Tüm başlıkları görmek için requests için DEBUG'ı etkinleştirin
Fiddler / Charles Trafiği yakala ve Set-Cookie ve Cookie başlıklarını gör
curl -v Komut satırından proksiler aracılığıyla aynı şeyi test edin

Hata ayıklama için günlüğü etkinleştirin:

import logging
import requests

logging.basicConfig(level=logging.DEBUG)

# Şimdi tüm istekler başlıkları ve cookies'leri yazdıracak
response = requests.get(
    'https://example.com',
    proxies={'https': 'http://proxy.example.com:8080'}
)

Proksinin cookies'leri bloke etmediğini kontrol edin:

curl -v -x http://proxy.example.com:8080 https://example.com

# Başlıklara bakın:
# Set-Cookie: ... (olmalı)
# Cookie: ... (sonraki istekte gönderilmeli)

İpucu: Konut proksilerini kullanıyorsanız, istekler arasında IP'yi döndürebileceklerini unutmayın. Cookies işleme mantığınızın bunu hesaba katması gerekir — bazı sunucular aynı oturumdaki farklı IP'lerden gelen istekleri reddeder.

Özet

Proksiler aracılığıyla çalışırken cookies sorunları doğru yapılandırma ile çözülür:

  • Cookie jar kullanarak cookies'leri otomatik olarak yönetin
  • Cookies'leri istekler arasında dosyaya kaydedin
  • Etki alanı bağlantısı ve Path özniteliklerini kontrol edin
  • Proksinin HTTPS desteğini doğrulayın
  • Sorunları belirlemek için hata ayıklama kullanın

Proksiler aracılığıyla oturum yönetiminin güvenilir çalışması gereken otomasyon ve ayrıştırma görevleri için, HTTPS desteği ve cookies yönetimi olan konut proksileri uygundur. Basit cookie jar ile başlayın ve yalnızca gerekirse daha karmaşık şemalara geçin.

```