Il costruttore URI di WebProxy sceglie un endpoint; non popola Credentials con le informazioni utente di quell'URI. Per un URL proxy HTTP convalidato dall'applicazione:

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 è l'URL proxy fornito, non l'URL del sito. Uri ne analizza l'authority, mentre UriBuilder rimuove le informazioni utente dall'endpoint memorizzato in WebProxy.

Dividi in corrispondenza del primo due punti letterale prima di decodificare i componenti. Così si preserva un due punti codificato nel nome utente e si mantengono i due punti aggiuntivi della password nella password. Decodifica ogni componente una sola volta; non codificare la password in Base64 al posto dell'escaping dell'URL.

Infine, assegna proxy al gestore HTTP previsto prima che tale gestore inizi le richieste. La sola costruzione dell'oggetto non cambia la politica di routing di un altro client.

Articoli correlati