Kichik urllib3 proksi diagnostikasi uchun qayta urinishlar o‘chirilgan ProxyManager ishlating. Bu ishlamay qolgan yozuvni yana sinab vaqt sarflash o‘rniga birinchi urinishni ko‘rsatadi. uv boshqaradigan loyihada:

uv add urllib3

Hujjatdagi oxirgi nuqtani xizmatingizdan yoki HTTP proksilar ro‘yxatidan HTTP proksi bilan almashtiring va so‘rovni shu menejer orqali bajaring:

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()

Avval response.status ni o‘qing, keyin response.data ni ko‘ring. Bular urllib3 maydonlari; Requests uslubidagi status_code va text ularni almashtirmaydi. Sayt rad javobi ishlaydigan proksi orqali kelishi mumkin. Javobdan oldingi istisno esa so‘rov yakunlanmaganini bildiradi.

retries=False diagnostik tanlov, ishlab chiqarishdagi qayta urinish siyosati emas. 5 soniyalik ulanish va 10 soniyalik o‘qish sozlamalari o‘z bosqichlarini cheklaydi; kafolatlangan umumiy 15 soniyalik muddat bermaydi. DNS va javobning rivojlanishi umumiy kutishga ta’sir qilishi mumkin.

Misol tanani oldindan yuklaydi va oxirida menejer hovuzlarini tozalaydi. Bir oxirgi nuqta orqali takror so‘rovlar uchun ulanishlar qayta ishlatilishi maqsadida menejerni ish tugaguncha saqlang. preload_content=False ga o‘tish hayot davrini o‘zgartiradi: chaqiruvchi oqimli javobni o‘qishi va bo‘shatishi kerak.

Menejerni tinglovchi xizmatga mos tanlang. Oddiy PoolManager boshqa joyda URL saqlangani uchun proksi ishlatadigan bo‘lmaydi; SOCKS urllib3.contrib.socks.SOCKSProxyManager va uning ixtiyoriy bog‘liqliklarini ishlatadi. Yuqoridagi kod HTTP ProxyManager yo‘lidan boradi.

O'xshash maqolalar