使用自定义 WebProxy 时,将代理账户设置在这个对象上。.NET 中另外几种凭据属性面向不同的接收方:

属性接收方
WebProxy.Credentials该对象代表的代理。
HttpClientHandler.Credentials目标服务器。
DefaultProxyCredentials当 Proxy 为 null 且 UseProxy 为 true 时,系统默认代理。

这个 .NET 10 示例提供了显式代理及其专用账户:

using System;
using System.Net;
using System.Net.Http;

string password = Environment.GetEnvironmentVariable("PROXY_PASSWORD")
    ?? throw new InvalidOperationException("Set PROXY_PASSWORD");

var proxy = new WebProxy("http://203.0.113.10:8080")
{
    Credentials = new NetworkCredential("proxy-user", password)
};

using var handler = new HttpClientHandler
{
    Proxy = proxy,
    UseProxy = true
};
using var client = new HttpClient(handler)
{
    Timeout = TimeSpan.FromSeconds(15)
};

using var response = await client.GetAsync("https://example.com/");
Console.WriteLine((int)response.StatusCode);

替换文档示例端点,并使用运营者提供的账户。无需认证的列表条目不需要凭空编造登录信息。由于已显式指定处理器的 Proxy,DefaultProxyCredentials 不能替代 WebProxy.Credentials。

UseDefaultCredentials 的作用域也取决于对象:处理器的服务器认证,与 WebProxy 的代理认证并不相同。发送进程用户的账户不是应对 407 的通用办法。

如果认证挑战仍在,检查实际认证方案、所选端点及客户端/处理器实例。代理认证可能发生在目标 TLS 之前,因此网站的 Authorization 请求头无法回答它。支持的认证仍取决于处理器、平台、服务和部署策略;这份设置无需改动全局 Windows 代理。

相关文章