Küçük bir urllib3 proxy teşhisi için yeniden denemeler kapalıyken ProxyManager kullanın. Böylece artık çalışmayan kaydı tekrar tekrar deneyerek beklemek yerine ilk deneme raporlanır. uv ile yönetilen bir projede:

uv add urllib3

Belgelendirme uç noktasını hizmetinizden veya HTTP proxy listesinden bir HTTP proxy ile değiştirin ve isteği o yönetici üzerinden çalıştırın:

import urllib3

proxy = urllib3.ProxyManager(
    "http://203.0.113.10:8080",
    timeout=urllib3.Timeout(connect=5, read=10),
    retries=False,
)

try:
    response = proxy.request("GET", "https://example.com/")
    print(response.status)
    print(response.data.decode("utf-8", errors="replace")[:200])
finally:
    proxy.clear()

Önce response.status değerini okuyun, sonra response.data alanını inceleyin. Bunlar urllib3 alanlarıdır; Requests tarzı status_code ve text bunların yerine geçmez. Site reddi çalışan proxy üzerinden gelebilir. Yanıttan önce oluşan istisna ise isteğin tamamlanamadığını gösterir.

retries=False teşhis tercihidir, üretim için yeniden deneme politikası değildir. 5 saniyelik bağlantı ve 10 saniyelik okuma ayarı kendi aşamalarını sınırlar; garantili 15 saniyelik toplam süre sınırı oluşturmaz. DNS ve yanıtın ilerlemesi toplam beklemeyi etkileyebilir.

Örnek gövdeyi önceden yükler ve sonunda yöneticinin havuzlarını temizler. Aynı uç noktadan tekrarlanan isteklerde bağlantılar yeniden kullanılabilsin diye yöneticiyi iş bitene kadar saklayın. preload_content=False seçimine geçmek yaşam döngüsünü değiştirir: çağıran taraf akış yanıtını okuyup serbest bırakmalıdır.

Yöneticiyi dinleyen hizmete göre seçin. Normal PoolManager başka yerde URL saklandığı için proxy farkındalığı kazanmaz; SOCKS urllib3.contrib.socks.SOCKSProxyManager ve isteğe bağlı bağımlılıklarını kullanır. Yukarıdaki kod HTTP ProxyManager yolunu izler.

İlgili makaleler