Конструкторът на 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 манипулатор, преди той да започне заявки. Самото създаване на обекта не променя маршрутизиращата политика на друг клиент.

Подобни статии