Konstruktor URI klasy WebProxy wybiera punkt końcowy; nie wypełnia Credentials informacjami o użytkowniku z tego URI. Dla adresu URL proxy HTTP weryfikowanego przez aplikację:

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 to podany adres URL proxy, a nie adres URL witryny. Uri analizuje jego authority, natomiast UriBuilder usuwa informacje o użytkowniku z punktu końcowego przechowywanego w WebProxy.

Podziel na pierwszym dosłownym dwukropku przed zdekodowaniem składników. Dzięki temu zakodowany dwukropek w nazwie użytkownika zostaje zachowany, a dodatkowe dwukropki hasła pozostają w haśle. Dekoduj każdy składnik tylko raz; nie koduj hasła w Base64 zamiast escapowania URL.

Na koniec przypisz proxy do zamierzonego programu obsługującego HTTP, zanim zaczną być wysyłane żądania. Samo utworzenie obiektu nie zmienia polityki routingu innego klienta.

Powiązane artykuły