UserInfo در URL پروکسی همان WebProxy.Credentials نیست
اطلاعات کاربر را از URI پروکسی HTTP استخراج و رمزگشایی کنید، پیش از ساخت NetworkCredential.
سازنده URI در WebProxy فقط یک نقطه پایانی انتخاب میکند؛ Credentials را از اطلاعات کاربر آن URI پر نمیکند. برای URL پروکسی HTTP که برنامه آن را بررسی میکند:
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 حذف میکند.
پیش از رمزگشایی اجزا، در نخستین دونقطه تحتاللفظی تقسیم کنید. این کار دونقطه رمزگذاریشده در نام کاربری را حفظ میکند و دونقطههای اضافی گذرواژه را در گذرواژه نگه میدارد. هر جزء را یک بار رمزگشایی کنید؛ گذرواژه را بهجای فرار URL با Base64 کدگذاری نکنید.
در پایان، پیش از آنکه آن کنترلکننده درخواستها را آغاز کند، proxy را به کنترلکننده HTTP موردنظر اختصاص دهید. تنها ساختن شیء، سیاست مسیریابی کلاینت دیگری را تغییر نمیدهد.