UserInfo во URL на прокси не е WebProxy.Credentials
Извлечете и декодирајте ги корисничките податоци од HTTP прокси URI пред да го создадете NetworkCredential.
Конструкторот на URI во WebProxy избира крајна точка; тој не ги пополнува Credentials од корисничките податоци на тој URI. За 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 екранирање.
На крајот, доделете го proxy на предвидениот HTTP обработувач пред тој да почне со барања. Самото создавање на објектот не ја менува политиката за рутирање на друг клиент.