Python urllib: پروکسی روٹنگ کو ویب سائٹ Basic Authentication کے ساتھ یکجا کرنا
عالمی opener کو دو بار بدلے بغیر urllib روٹنگ اور منزل کی Basic authentication کو ایک واضح opener میں یکجا کریں۔
install_opener() کو دو بار کال کرنے سے دوسرا opener پہلے میں شامل نہیں ہوتا۔ یہ module کا ڈیفالٹ opener بدل دیتا ہے۔ اگر ایک آبجیکٹ proxy جانتا ہے اور دوسرا ویب سائٹ لاگ اِن، تو مطلوبہ handlers والا ایک ہی opener بنائیں۔
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()proxy اور منزل صرف مثالیں ہیں۔ عوامی HTTP proxy کے ذریعے قابلِ رسائی عوامی سروس کے لیے HTTP proxy فہرست روٹنگ handler کے لیے ممکنہ endpoints فراہم کرتی ہے۔ یہ opener HTTPS درخواست کو HTTP proxy سے گزارتا ہے اور منزل کے Basic چیلنج کو سنبھالتا ہے۔ یہ proxy کی توثیق کنفیگر نہیں کرتا۔
اگر proxy کو بھی لاگ اِن درکار ہو تو معاون proxy توثیق کا انتظام الگ سے منتخب کریں۔ CONNECT کے وقت 407 اس سے پہلے ہوتا ہے کہ منزل اپنا چیلنج جاری کر سکے۔ پاس ورڈ مینیجر میں ویب سائٹ کی اسناد شامل کرنا اُس پہلے تبادلے کو پورا نہیں کر سکتا۔
opener.open() کو براہِ راست کال کرنا کنفیگریشن کو آپریشن کے ساتھ رکھتا ہے۔ module بھر کے ڈیفالٹ کو بدلنے کی ضرورت نہیں، الا یہ کہ ایپلیکیشن جان بوجھ کر چاہے کہ تمام سہولت بخش کالیں یہ opener شیئر کریں۔