جب ایک urllib opener کو براہِ راست جڑنا ہو تو ProxyHandler کو خالی میپنگ دیں:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

خالی ڈکشنری کوئی پراکسی راستہ فراہم نہیں کرتی۔ میپنگ چھوڑ دینے پر ہینڈلر ماحول اور پلیٹ فارم کی ترتیبات سے پراکسی دریافت کرتا ہے۔ بنانے کے یہ دو طریقے مختلف پالیسیاں ظاہر کرتے ہیں۔

مثال Python کی معیاری لائبریری استعمال کرتی ہے اور معمول کی HTTPS توثیق برقرار رکھتی ہے۔ with بلاک جواب بند کرتا ہے، تب بھی جب کسی استثنا سے بلاک چھوڑنا پڑے۔

ایک ہی ایپلی کیشن میں براہِ راست اور پراکسی کے ذریعے درخواستیں

دو opener دو پالیسیاں رکھ سکتے ہیں، کالوں کے درمیان ماحول کے متغیرات بدلے بغیر:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

لوپ بیک پتے کو اپنے HTTP پراکسی سے بدلیں یا پراکسی والے موازنے کے لیے HTTP پراکسی فہرست سے امیدوار چنیں۔ سروس اجازت دے تو یہ HTTPS ہدف کا رابطہ CONNECT کے ذریعے لے جا سکتا ہے۔ سننے والے کی پروٹوکول اور تصدیقِ شناخت کی معاونت ہینڈلر سے مطابقت رکھنی چاہیے۔

پہلے سے طے شدہ opener کو نہ بدلیں

راستے کے ذمہ دار آبجیکٹ کے ذریعے direct.open یا proxied.open کال کریں۔ install_opener پورے عمل کا وہ پہلے سے طے شدہ opener بدلتا ہے جو urllib کے سہولت والے کال استعمال کرتے ہیں؛ یوں اسے استعمال کرنے والی لائبریری غیر متعلقہ کوڈ کو متاثر کر سکتی ہے۔ اوپر کے الگ opener کے لیے یہ ضروری نہیں۔

timeout آرگومنٹ ایک آپریشن کی ترتیب ہے، ہر منتقلی کے پورے حقیقی وقت کی حد نہیں۔ صرف کام کے لیے درکار ڈیٹا پڑھیں اور سخت مجموعی وقت کی حد ہو تو اعلیٰ سطح کی میعاد استعمال کریں۔

یہ opener آبجیکٹ دوسری لائبریری کا کلائنٹ، موجودہ عمل یا براؤزر کی پراکسی ترتیبات نہیں بدلتے۔

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