پروکسی جانچنے والوں میں عالمی urllib opener تبدیلیوں سے بچیں
urllib پروکسی جانچ کو ان کے اپنے opener تک محدود رکھیں، بجائے اس کے کہ پورے عمل کے روٹنگ اور ٹائم آؤٹ ڈیفالٹ بدلیں۔
from urllib.request import ProxyHandler, build_opener
def make_proxy_opener(proxy_uri):
return build_opener(ProxyHandler({
"http": proxy_uri,
"https": proxy_uri,
}))
opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.جب راستہ جانچ کا ہو تو اس opener کا اپنا open طریقہ کار کال کریں۔ مثال کا HTTP اینڈ پوائنٹ آپ کی سروس یا عوامی جانچ کے لیے HTTP پروکسی فہرست سے آ سکتا ہے۔ یہ ٹکڑا ملکیت ظاہر کرتا ہے؛ یہ مکمل تصدیق یا صحت کی پالیسی متعین نہیں کرتا۔ اکاؤنٹ کے مخصوص کسی بھی handler کو اسی مطلوبہ کلائنٹ سے منسلک رکھیں۔
urllib.request.install_opener() عمل بھر کا ڈیفالٹ بدلتا ہے جسے بعد میں module سطح کے urlopen() کال استعمال کرتے ہیں۔ اسی لیے پروکسیوں میں گھومنے والا جانچنے والا غیر متعلقہ درخواستوں کو اپنے آخری اینڈ پوائنٹ پر چھوڑ سکتا ہے۔ عارضی طور پر انسٹال کرنا اور صفائی کے وقت بحال کرنا پھر بھی مشترکہ تبدیلی کے دوران ہم وقت درخواستوں کو چلنے دیتا ہے۔
socket.setdefaulttimeout() اسی طرح بعد میں بنائے گئے socket کے ڈیفالٹ بدلتا ہے۔ جب صرف جانچ کو ہی یہ ملنا چاہیے تو آپریشن سطح کا ٹائم آؤٹ استعمال کریں۔
جانچ کے جوابات بند کریں اور نتائج کو مخصوص رکھیں: HTTP غلطی کا جواب خود بخود مردہ پروکسی سننے والا نہیں ہوتا۔ اگر async سروس میں synchronous urllib جانچ استعمال ہو تو رکاوٹ ڈالنے والا کام مناسب worker کو منتقل کریں؛ وہ نفاذ کا فیصلہ عالمی opener تبدیلی کو الگ نہیں کرتا۔
جانچ کو کوئی دوسری نیٹ ورک پالیسی پیچھے چھوڑے بغیر اپنا مشاہدہ واپس کرنا چاہیے۔ اس کا اپنا کلائنٹ آبجیکٹ اور محدود کارروائی اس حد کو واضح کرتے ہیں۔