پراکسی پاس ورڈ میں خاص حروف
پراکسی صارف نام اور پاس ورڈ الگ الگ انکوڈ کریں تاکہ @، کولن، سلیش اور # URL کو نہ بگاڑیں۔
درست اسناد کے باوجود @ یا # والا پاس ورڈ ہاتھ سے بنایا پراکسی URL بگاڑ سکتا ہے۔ ان حروف کا URL میں پہلے سے مطلب ہے، اس لیے کلائنٹ پاس ورڈ کا حصہ ہوسٹ نام یا فریگمنٹ سمجھ سکتا ہے۔
اسناد کے دونوں خانے الگ انکوڈ کریں
یہ مثال URL کے ساختی جداکار محفوظ رکھتی ہے اور صرف صارف نام اور پاس ورڈ انکوڈ کرتی ہے:
from urllib.parse import quote
username = "user@team"
password = "p:a/ss#?"
proxy_url = (
"http://"
+ quote(username, safe="")
+ ":"
+ quote(password, safe="")
+ "@203.0.113.10:8080"
)
اپنا اصل اینڈپوائنٹ اور اسناد استعمال کریں۔ دکھایا پتہ دستاویزی مثال ہے۔ خالی safe آرگومنٹ اہم ہے: quote عموماً سلیش کو بغیر اسکیپ چھوڑتا ہے، مگر اس اسناد والے خانے کا سلیش انکوڈ ہونا چاہیے۔
پورا پراکسی URL انکوڈ نہ کریں۔ اسکیم کے جداکار اور اسناد و ہوسٹ کے درمیان @ انکوڈ کرنا وہ ساخت بگاڑ دیتا ہے جسے بچانا مقصود تھا۔ پہلے سے انکوڈ پاس ورڈ کو دوسری بار بھی انکوڈ نہ کریں۔
نتیجہ Requests کے ساتھ استعمال کریں
import requests
response = requests.get(
"https://example.com/",
proxies={"http": proxy_url, "https": proxy_url},
timeout=(5, 15),
)
response.raise_for_status()
درخواست پھر بھی ناکام ہو تو دیکھیں کہ پراکسی لاگ ان مسترد کر رہا ہے یا کلائنٹ اس سے پہلے پارسنگ یا رابطے میں ناکام ہوا۔ 407 تصدیقِ شناخت کا چیلنج اور غیر معتبر URL الگ خرابیاں ہیں۔
HTTPX تصدیقِ شناخت الگ رکھ سکتا ہے
HTTPX کا Proxy آبجیکٹ اینڈپوائنٹ اور اسناد الگ آرگومنٹ کے طور پر لے سکتا ہے:
import httpx
proxy = httpx.Proxy(
"http://203.0.113.10:8080",
auth=("user@team", "p:a/ss#?"),
)
with httpx.Client(proxy=proxy, trust_env=False, timeout=15) as client:
response = client.get("https://example.com/")
response.raise_for_status()
اس سے userinfo حصہ خود بنانے کی ضرورت نہیں رہتی۔ یہ اسناد کو پراکسی رابطے سے آزاد طور پر انکرپٹ نہیں کرتا اور ہر سروس میں معاون تصدیق کا طریقہ بھی نہیں چنتا۔
مفت فہرست صرف IP اور پورٹ دے تو یہ مثال پہلے سے طے شدہ اسناد نہیں دیتی۔ تصدیقِ شناخت صرف تب استعمال کریں جب منتظم واقعی اکاؤنٹ دے۔ اسناد والے URL مشترک لاگ اور سورس فائلوں میں نہ رکھیں۔