用 HttpClient.DefaultProxy.IsBypassed 检查 .NET 的 NO_PROXY 规则
当 HttpClient 需要对两者都绕过代理时,同时列出裸域名和带前导点的形式,然后检查 IsBypassed。
按 HttpClient 文档化的环境代理策略,example.internal 与 .example.internal 的匹配方式不同。裸名称选择父主机,带前导点的形式选择其子域。
如果两者都应直连,请在启动环境中同时写入两者:
export no_proxy='example.internal,.example.internal'
把它们并入你打算保留的现有绕过列表。在变量名区分大小写的系统上,.NET 会先检查小写的代理环境变量,再检查大写形式,因此过时的 no_proxy 可能优先于 NO_PROXY。
在应用程序内部,无需向目标发出 HTTP 请求即可检查默认选择器。
foreach (var host in new[] {
"example.internal", "api.example.internal", "other.internal"
})
{
var uri = new Uri("https://" + host + "/");
Console.WriteLine($"{host}: bypass={HttpClient.DefaultProxy.IsBypassed(uri)}");
}
该片段使用了 System 和 System.Net.Http。若应用明确提供了另一个 IWebProxy,则应改为检查处理程序实际的代理。请在默认代理初始化之前设置好目标环境。
这些是 .NET 文档化的规则。用同一字符串得到的 curl 结果并不能证明另一个客户端选择了相同路径,而绕过决策仍然需要网络可直连。