Le constructeur d'URI de WebProxy choisit un point de terminaison ; il ne remplit pas Credentials avec les informations utilisateur de cet URI. Pour une URL de proxy HTTP validée par l'application :

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 est l'URL de proxy fournie, pas l'URL du site. Uri analyse son authority, tandis que UriBuilder retire les informations utilisateur du point de terminaison stocké dans WebProxy.

Coupez au premier deux-points littéral avant de décoder les composants. Cela préserve un deux-points encodé dans le nom d'utilisateur et conserve les deux-points supplémentaires du mot de passe. Décodez chaque composant une seule fois ; n'encodez pas le mot de passe en Base64 à la place de l'échappement d'URL.

Enfin, affectez proxy au gestionnaire HTTP prévu avant que ce gestionnaire n'émette des requêtes. La seule construction de l'objet ne modifie pas la politique de routage d'un autre client.

Articles similaires