چھوٹی urllib3 پراکسی تشخیص کے لیے ProxyManager استعمال کریں اور دوبارہ کوششیں بند رکھیں۔ یوں پہلی کوشش سامنے آتی ہے، بجائے ناکارہ اندراج کو بار بار آزما کر زیادہ وقت صرف کرنے کے۔ uv کے زیر انتظام منصوبے میں:

uv add urllib3

دستاویزی اینڈ پوائنٹ کو اپنی سروس یا HTTP پراکسی فہرست کی HTTP پراکسی سے بدلیں اور درخواست اسی منیجر سے چلائیں:

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

پہلے response.status پڑھیں، پھر response.data دیکھیں۔ یہ urllib3 کے خانے ہیں؛ Requests طرز کے status_code اور text ان کے بدل نہیں۔ سائٹ کا انکار کام کرنے والی پراکسی سے آ سکتا ہے۔ اس کے برعکس جواب سے پہلے استثنا درخواست مکمل نہ ہونے کی نشانی ہے۔

retries=False تشخیص کا انتخاب ہے، پیداواری دوبارہ کوشش کی پالیسی نہیں۔ کنکشن کے 5 سیکنڈ اور پڑھنے کے 10 سیکنڈ اپنے اپنے مراحل کو محدود کرتے ہیں؛ ان سے ضمانت شدہ کل 15 سیکنڈ کی آخری حد نہیں بنتی۔ DNS اور جواب کی پیش رفت کل انتظار پر اثر ڈال سکتی ہے۔

مثال جواب کا متن پہلے لوڈ کرتی ہے اور آخر میں منیجر کے پول صاف کرتی ہے۔ اسی اینڈ پوائنٹ پر بار بار درخواستوں کے لیے منیجر کام کے آخر تک رکھیں تاکہ کنکشن دوبارہ استعمال ہوں۔ preload_content=False پر جانے سے دورِ حیات بدلتا ہے: بلانے والے کو اسٹریم شدہ جواب پڑھنا اور آزاد کرنا ہوتا ہے۔

منیجر سننے والی سروس کے مطابق چنیں۔ عام PoolManager صرف کہیں اور URL محفوظ ہونے سے پراکسی سمجھنے والا نہیں بنتا؛ SOCKS، urllib3.contrib.socks.SOCKSProxyManager اور اس کے اختیاری انحصارات استعمال کرتا ہے۔ اوپر کا کوڈ HTTP ProxyManager راستہ استعمال کرتا ہے۔

متعلقہ مضامین