El UserInfo d'una URL de proxy no és WebProxy.Credentials
Extreu i descodifica la informació d'usuari d'un URI de proxy HTTP abans de crear el NetworkCredential.
El constructor d'URI de WebProxy tria un punt final; no omple Credentials amb la informació d'usuari d'aquest URI. Per a una URL de proxy HTTP validada per l'aplicació:
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 és la URL de proxy proporcionada, no la URL del lloc web. Uri analitza l'authority, mentre que UriBuilder elimina la informació d'usuari del punt final desat a WebProxy.
Dividiu pel primer dos punts literal abans de descodificar els components. Això conserva un dos punts codificat dins del nom d'usuari i manté els dos punts addicionals de la contrasenya dins de la contrasenya. Descodifiqueu cada component una vegada; no codifiqueu la contrasenya en Base64 com a substitut de l'escapament d'URL.
Finalment, assigneu proxy al gestor HTTP previst abans que aquest gestor comenci les peticions. Construir l'objecte per si sol no canvia la política d'encaminament d'un altre client.