UserInfo einer Proxy-URL ist nicht WebProxy.Credentials
Benutzerinformationen aus einer HTTP-Proxy-URI extrahieren und dekodieren, bevor die NetworkCredential erstellt wird.
Der URI-Konstruktor von WebProxy wählt einen Endpunkt; er füllt Credentials nicht aus den Benutzerinformationen dieser URI. Für eine von der Anwendung geprüfte HTTP-Proxy-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 ist die übergebene Proxy-URL, nicht die Website-URL. Uri parst ihre Authority, während UriBuilder die Benutzerinformationen aus dem in WebProxy gespeicherten Endpunkt entfernt.
Teilen Sie am ersten wörtlichen Doppelpunkt, bevor die Komponenten dekodiert werden. Das bewahrt einen kodierten Doppelpunkt im Benutzernamen und hält zusätzliche Passwort-Doppelpunkte im Passwort. Dekodieren Sie jede Komponente einmal; kodieren Sie das Passwort nicht mit Base64 als Ersatz für URL-Escaping.
Weisen Sie proxy abschließend dem vorgesehenen HTTP-Handler zu, bevor dieser Handler Anfragen startet. Das bloße Erzeugen des Objekts ändert die Routingrichtlinie eines anderen Clients nicht.