urllib3 ilə proksi IP-dən istifadə
HTTP proksi üçün ProxyManager seçin, urllib3 cavab sahələrini yoxlayın və təkrar cəhdləri, SOCKS-un ayrıca menecerini nəzərə alın.
Kiçik urllib3 proksi diaqnostikası üçün təkrar cəhdləri söndürərək ProxyManager istifadə edin. Bu, işləməyən qeydi təkrar sınamağa əlavə vaxt sərf etmək əvəzinə ilk cəhdi bildirir. uv ilə idarə olunan layihədə:
uv add urllib3Sənəddəki son nöqtəni xidmətinizdən və ya HTTP proksi siyahısından HTTP proksi ilə dəyişin və sorğunu həmin menecer üzərindən göndərin:
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()
Əvvəl response.status oxuyun, sonra response.data yoxlayın. Bunlar urllib3 sahələridir; Requests üslubundakı status_code və text onları əvəz etmir. Saytın rədd cavabı işləyən proksi üzərindən gələ bilər. Cavabdan əvvəl istisna isə sorğunun tamamlanmadığını göstərir.
retries=False diaqnostik seçimdir, istehsal üçün təkrar cəhd siyasəti deyil. 5 saniyəlik bağlantı və 10 saniyəlik oxuma parametrləri öz mərhələlərini məhdudlaşdırır; bunlar zəmanətli 15 saniyəlik ümumi son hədd yaratmır. DNS və cavabın irəliləyişi ümumi gözləməyə təsir edə bilər.
Nümunə məzmunu öncədən yükləyir və sonda menecerin hovuzlarını təmizləyir. Eyni son nöqtədən təkrar sorğular üçün işi bitənədək meneceri saxlayın ki, bağlantılar yenidən istifadə olunsun. preload_content=False seçiminə keçmək həyat dövrünü dəyişir: çağıran tərəf axın cavabını oxumalı və azad etməlidir.
Meneceri dinləyici xidmətə uyğun seçin. URL başqa yerdə saxlanıldığı üçün adi PoolManager proksi dəstəkli olmur; SOCKS urllib3.contrib.socks.SOCKSProxyManager və onun əlavə asılılıqlarından istifadə edir. Yuxarıdakı kod HTTP ProxyManager yolunu izləyir.