UserInfo в URL на прокси не е WebProxy.Credentials
Извлечете и декодирайте потребителската информация от HTTP прокси URI, преди да създадете NetworkCredential.
Конструкторът на WebProxy с URI избира крайна точка; той не попълва 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 манипулатор, преди той да започне заявки. Самото създаване на обекта не променя маршрутизиращата политика на друг клиент.