El UserInfo de una URL de proxy no es WebProxy.Credentials
Extrae y descodifica la información de usuario de un URI de proxy HTTP antes de crear el NetworkCredential.
El constructor de URI de WebProxy elige un extremo; no rellena Credentials con la información de usuario de ese URI. Para una URL de proxy HTTP validada por la aplicación:
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 es la URL de proxy proporcionada, no la URL del sitio web. Uri analiza su authority, mientras que UriBuilder elimina la información de usuario del extremo almacenado en WebProxy.
Divide en el primer dos puntos literal antes de descodificar los componentes. Así se conserva un dos puntos codificado dentro del nombre de usuario y se mantienen los dos puntos adicionales de la contraseña dentro de la contraseña. Descodifica cada componente una vez; no codifiques la contraseña en Base64 como sustituto del escape de URL.
Por último, asigna proxy al controlador HTTP previsto antes de que ese controlador empiece a enviar solicitudes. Construir el objeto por sí solo no cambia la política de enrutamiento de otro cliente.