Python Requests kütüphanesiyle proxy kullanmak, proxies parametresine bir sözlük vermeyi ve "http" ile "https" gibi protokol şemalarını proxy sunucusunun URL'sine eşlemeyi gerektirir. Bu yapılandırma, geliştiricilerin kaynak IP'lerini gizlemesini, bölgesel engelleri aşmasını ve hız sınırlamasından kaçınmak için istekleri birden fazla düğüme dağıtmasını sağlar. Üretim ortamlarında sağlam bir uygulama; kimlik doğrulamayı yönetmeyi, SOCKS5 protokollerini kullanmayı ve oturum tabanlı kalıcılığı yapılandırmayı içerir.
Requests'te temel proxy yapılandırması
requests kütüphanesi, standart bir sözlük yapısı kullanarak proxy entegrasyonunu basitleştirir. Bir istek başlattığınızda kütüphane, trafiğin bir aracı üzerinden yönlendirilip yönlendirilmeyeceğini belirlemek için bu sözlüğü kontrol eder. En temel uygulama, proxy URL'sini tanımlayıp doğrudan get() veya post() metoduna geçirmektir.
import requests
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
response = requests.get('https://api.ipify.org?format=json', proxies=proxies)
print(response.json())
Bu örnekte HTTP trafiği bir yolu, HTTPS trafiği ise başka bir yolu izler. Proxy sunucunuz her ikisini de destekliyorsa, her iki anahtar için aynı URL'yi kullanabilirsiniz. GProxy gibi bir sağlayıcı kullanıyorsanız, arka plandaki yönlendirmeyi sizin adınıza yapan bir gateway adresi alırsınız; bu da sözlüğü tek bir giriş noktasına indirger.
Proxy kimlik doğrulamasının yönetimi
Profesyonel proxy hizmetlerinin çoğu, yetkisiz kullanımı önlemek için kimlik doğrulama ister. Requests, proxy URL'sinin içinde satır içi temel kimlik doğrulamayı destekler. Biçim standart http://user:password@host:port sözdizimini izler. Ek başlıkların veya özel auth işleyicilerinin yükünü ortadan kaldırdığı için en verimli kimlik doğrulama yolu budur.
proxies = {
'http': 'http://user123:[email protected]:8000',
'https': 'http://user123:[email protected]:8000',
}
Parolanız @, : veya / gibi özel karakterler içeriyorsa bunları URL kodlaması ile kodlamanız gerekir. Bu karakterleri kodlamamak, kütüphanenin URL yapısını yanlış yorumlamasına ve bağlantı hatalarına ya da 407 Proxy Authentication Required yanıtlarına yol açar.

Protokol çeşitleri: HTTP, HTTPS ve SOCKS
Doğru protokolü seçmek kullanım senaryonuza bağlıdır. HTTP proxy'ler temel web scraping için yaygın olsa da, SOCKS5 proxy'ler UDP ve DNS sorguları dahil her tür trafiği taşıyabilen daha alt seviye bir bağlantı sunar; bu da gelişmiş anti-bot sistemleri tarafından tespit edilmelerini belirgin şekilde zorlaştırır.
Requests ile SOCKS5 proxy kullanmak için pysocks bağımlılığını kurmanız gerekir; bu paket çekirdek kütüphaneye dahil değildir. Kurulum pip install requests[socks] ile yapılır. Kurulumdan sonra yapılandırma neredeyse aynı kalır, yalnızca protokol öneki socks5 veya socks5h olarak değiştirilir ("h" soneki DNS çözümlemesinin proxy sunucusu tarafında yapılmasını sağlar; bu anonimlik açısından daha iyidir).
| Protokol | Hız | Anonimlik düzeyi | En uygun kullanım |
|---|---|---|---|
| HTTP | Yüksek | Düşük - orta | Standart web gezinme, basit API çağrıları. |
| HTTPS (SSL) | Orta | Yüksek | Güvenli veri aktarımı, derin paket incelemesini aşma. |
| SOCKS5 | Yüksek | Çok yüksek | Hassas hedeflerin taranması, HTTP dışı trafik, UDP. |
| SOCKS5h | Yüksek | En üst düzey | Anonimlik önceliğinde DNS sızıntılarını önleme. |
İleri düzey oturum yönetimi ve kalıcılık
Yüksek performanslı uygulamalarda her istek için yeni bir bağlantı açmak verimsizdir. requests.Session() nesnesi, proxy'ler dahil belirli parametreleri birden fazla istek boyunca kalıcı kılmanıza olanak tanır. Bu, urllib3'ün bağlantı havuzunu kullanır; proxy sunucusuna açılan alttaki TCP bağlantıları yeniden kullanılır ve gecikme ciddi ölçüde azalır.
session = requests.Session()
session.proxies = {
'http': 'http://proxy.gproxy.com:8000',
'https': 'http://proxy.gproxy.com:8000',
}
# 'session' kullanan sonraki tüm istekler tanımlı proxy'leri kullanacak
for i in range(5):
response = session.get(f'https://example.com/page/{i}')
print(f"Request {i}: {response.status_code}")
Oturum kullanmak, özellikle "sticky session" destekleyen GProxy residential proxy'leriyle çalışırken avantajlıdır. Proxy kimlik doğrulama dizesinde belirli bir oturum kimliği veya token geçirerek aynı IP adresini belirli bir süre (örneğin 10-30 dakika) koruyabilirsiniz; bu, kullanıcı girişi ya da çok adımlı form gönderimi gerektiren görevler için hayati önemdedir.
Proxy kararlılığı için zaman aşımı yapılandırması
Proxy'ler ağ yolunuza fazladan bir sıçrama ekler; bu da doğal olarak gecikme riskini artırır. Açık zaman aşımları olmadan, bir proxy düğümü yanıt vermez hale gelirse Python betiğiniz süresiz olarak asılı kalabilir. Her zaman bir zaman aşımı demeti tanımlayın: ilk değer bağlantı aşaması, ikincisi okuma aşaması için.
# Proxy'ye bağlanmak için 5 saniye, veri için 15 saniye bekle
response = requests.get('https://target.com', proxies=proxies, timeout=(5, 15))

Proxy rotasyonu ve yeniden denemelerin uygulanması
Statik proxy kullanımı kolayca tespit edilir. İnsan davranışını taklit etmek ve veri toplamayı ölçeklendirmek için IP'leri değiştirmeniz gerekir. GProxy, rotasyonu kendi tarafında yürüten back-connect proxy'ler sunsa da, bazen belirli proxy IP'lerinden oluşan bir listeyi kod içinde yönetmeniz gerekebilir.
Dayanıklı bir uygulama, Requests'in HTTPAdapter'ına entegre edilmiş urllib3 Retry nesnesini kullanır. Bu kurulum, belirli HTTP durum kodlarıyla (429 Too Many Requests veya 502 Bad Gateway gibi) ya da bağlantı hatalarıyla karşılaşıldığında isteği otomatik olarak yeniden dener.
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
proxy_list = [
"http://proxy1.gproxy.com:8000",
"http://proxy2.gproxy.com:8000",
"http://proxy3.gproxy.com:8000"
]
def get_resilient_session(proxy_url):
session = requests.Session()
retry_strategy = Retry(
total=3,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["HEAD", "GET", "OPTIONS"],
backoff_factor=1
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
session.proxies = {"http": proxy_url, "https": proxy_url}
return session
# Rotasyon mantığıyla kullanım örneği
import random
current_proxy = random.choice(proxy_list)
safe_session = get_resilient_session(current_proxy)
Bu yaklaşım, geçici ağ arızalarının veya proxy tarafındaki kısıtlamaların tüm otomasyon hattınızı çökertmesini önler. GProxy'nin yüksek erişilebilirlikli residential havuzunu yerel yeniden deneme mantığıyla birleştirerek, sıkı korunan hedeflere karşı bile %100'e yakın başarı oranlarına ulaşırsınız.
Ortam düzeyinde proxy yapılandırması
Bazı dağıtım senaryolarında proxy'leri betiğe gömmek pratik değildir. Requests, proxy ayarlarını ortam değişkenlerinden otomatik olarak algılayacak şekilde tasarlanmıştır. Kodda proxies parametresi verilmezse kütüphane HTTP_PROXY, HTTPS_PROXY ve NO_PROXY değişkenlerini arar.
- HTTP_PROXY: http:// istekleri için kullanılır.
- HTTPS_PROXY: https:// istekleri için kullanılır.
- NO_PROXY: proxy'yi atlaması gereken ana bilgisayar adlarının virgülle ayrılmış listesi (örneğin "localhost,internal.corp").
Linux veya macOS terminalinde betiğinizi çalıştırmadan önce bunları tanımlayabilirsiniz:
export HTTP_PROXY="http://user:[email protected]:8000"
export HTTPS_PROXY="http://user:[email protected]:8000"
python scraper.py
Bu, kaynak kodu değiştirmeden geliştirme ve üretim proxy setleri arasında geçiş yapmak istediğiniz Docker ortamlarında özellikle kullanışlıdır. Kodda açıkça bir proxies sözlüğü geçirmenin bu ortam değişkenlerini her zaman geçersiz kılacağını unutmayın.
Sık karşılaşılan proxy hatalarının çözümü
Python'da proxy sorunlarını ayıklamak, proxy'ye ulaşamama ile proxy'nin hedefe ulaşamaması arasındaki farkı anlamayı gerektirir. En yaygın senaryolar şunlardır:
- ProxyError (Max retries exceeded): Genellikle proxy sunucusunun kendisinin kapalı olduğunu ya da IP/port bilgisinin yanlış olduğunu gösterir. GProxy kimlik bilgilerinizi ve gateway durumunu doğrulayın.
- 407 Proxy Authentication Required: Kimlik bilgileriniz eksik, URL içinde yanlış biçimlendirilmiş ya da IP adresiniz GProxy panelinde beyaz listeye eklenmemiş demektir.
- 403 Forbidden: Hedef web sitesi proxy IP'sini bot olarak tanımlamıştır. Bu, residential proxy'lere geçmeniz veya rotasyon sıklığınızı artırmanız gerektiğinin işaretidir.
- SSLError: Genellikle sertifika yapılandırması düzgün yapılmamış bir araya girici (intercepting) proxy kullanıldığında ortaya çıkar. Proxy'ye güveniyorsanız
verify=Falseayarlayabilirsiniz, ancak bu üretim ortamı için önerilmez.
El sıkışma (handshake) sürecini daha ayrıntılı görmek için, Requests'in dahili olarak kullandığı urllib3 kütüphanesi için alt seviye günlüklemeyi etkinleştirebilirsiniz:
import logging
import http.client
http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True
Önemli çıkarımlar
Python Requests'te proxy kullanımında ustalaşmak, basit yapılandırma ile sağlam hata yönetimi arasında bir dengedir. Temel sözlüklerden oturum tabanlı yönetime ve otomatik yeniden denemelere geçerek, hem hızlı hem de dayanıklı scraper ve otomasyon araçları geliştirebilirsiniz. GProxy gibi yüksek kaliteli bir sağlayıcıyla entegrasyon, IP rotasyonu ve geo-targeting karmaşıklığını altyapı düzeyinde üstlenerek bu işi daha da kolaylaştırır.
- Oturum kullanın: Bağlantı havuzundan ve daha iyi performanstan yararlanmak için tekil
requests.get()çağrıları yerine her zamanrequests.Session()'ı tercih edin. - Zaman aşımı tanımlayın: Hiçbir isteği zaman aşımı olmadan bırakmayın; proxy kullanımında 5 saniyelik bağlantı ve 15 saniyelik okuma zaman aşımı genelde güvenli varsayılanlardır.
- Kimlik bilgilerinizi koruyun: Güvenlik sızıntılarını önlemek için proxy kimlik bilgilerini betiklerinize gömmek yerine ortam değişkenlerinde veya
.envdosyalarında saklayın.
Bunları da okuyun
A-Parser için Proxy'ler: Arama Motoru Parsing Kurulumu
Xrumer İçin Proxy'ler: Hangisini Seçmeli ve Nasıl Kurmalı
Key Collector için proxy'ler: kurulum ve rotasyon
Binom Tracker: Trafik arbitrajı için proxy kurulumu
VKDog Pro: VK Content Auto-posting and Grabbing
