پراکسی URL کا UserInfo، WebProxy.Credentials نہیں ہے
NetworkCredential بنانے سے پہلے HTTP پراکسی URI سے صارف کی معلومات نکالیں اور ڈی کوڈ کریں۔
WebProxy کا URI کنسٹرکٹر صرف ایک اینڈ پوائنٹ منتخب کرتا ہے؛ وہ اُس URI کی صارف معلومات سے Credentials نہیں بھرتا۔ ایپلیکیشن سے تصدیق شدہ HTTP پراکسی URL کے لیے:
var uri = new Uri(proxyUrl);
var endpoint = new UriBuilder(uri)
{
UserName = "",
Password = ""
};
var proxy = new System.Net.WebProxy(endpoint.Uri);
if (uri.UserInfo.Length > 0)
{
var parts = uri.UserInfo.Split(new[] { ':' }, 2);
var username = Uri.UnescapeDataString(parts[0]);
var password = parts.Length == 2
? Uri.UnescapeDataString(parts[1])
: "";
proxy.Credentials =
new System.Net.NetworkCredential(username, password);
}
proxyUrl فراہم کردہ پراکسی URL ہے، ویب سائٹ URL نہیں۔ Uri اُس کے authority کا تجزیہ کرتا ہے، جبکہ UriBuilder WebProxy میں محفوظ اینڈ پوائنٹ سے صارف کی معلومات ہٹا دیتا ہے۔
اجزاء کو ڈی کوڈ کرنے سے پہلے پہلے لغوی کولن پر تقسیم کریں۔ اس سے صارف نام کے اندر انکوڈ شدہ کولن محفوظ رہتا ہے اور پاس ورڈ کے اضافی کولن پاس ورڈ میں ہی رہتے ہیں۔ ہر جزو کو ایک بار ڈی کوڈ کریں؛ پاس ورڈ کو Base64 میں انکوڈ نہ کریں، بلکہ URL escaping کریں۔
آخر میں، ہینڈلر کے درخواستیں شروع کرنے سے پہلے proxy کو مطلوبہ HTTP ہینڈلر کے حوالے کریں۔ صرف آبجیکٹ بنانے سے کسی دوسرے کلائنٹ کی روٹنگ پالیسی نہیں بدلتی۔