Pro*_*gle 4 c# http-proxy dotnet-httpclient .net-core-3.0
我们正在尝试让代理功能在 Windows 上的 .Net Core 3.0(或 3.1)应用程序中工作。我们发现 HTTPS_PROXY 和 HTTP_PROXY 变量按预期识别和处理,但默认代理似乎不支持 NO_PROXY 变量。这是示例代码:
HttpClient client = new HttpClient();
IWebProxy myProxy = HttpClient.DefaultProxy;
Uri target = new Uri(args[0]);
Uri proxy = myProxy.GetProxy(target);
Console.WriteLine($"Target proxy for {target} is {proxy} {myProxy.IsBypassed(target)}");
Run Code Online (Sandbox Code Playgroud)
如果我从 Powershell 运行它:
if (-not $env:path.Contains('c:\data\src')) {
$env:path = "$env:Path;C:\data\src\Local\DefaultProxy\bin\Debug\netcoreapp3.0"
}
$env:HTTPS_PROXY = 'http://10.11.10.10'
$env:NO_PROXY = '*'
DefaultProxy https://www.contoso.com
Run Code Online (Sandbox Code Playgroud)
我得到:https://www.contoso.com/ 的目标代理是http://10.11.10.10/ False
我希望得到空白和真实。
我应该更改什么才能使用 NO_PROXY 从默认代理中排除域?
我提取了 .Net Core 3.1 System.Net.Http.HttpEnvironmentProxy的代码并通读了它。NO_PROXY 中不支持“*”。因此,这根本行不通。此外,对 GetProxy 的调用完全忽略了 NO_PROXY 值。NO_PROXY 列表中的域需要是 . 前缀(这是标准的,但没有特别好的记录)。我可以使用这些信息来改变我对文档的解释并获得更好的结果。
所以,如果我修改powershell代码如下:
$env:HTTPS_PROXY = 'http://10.11.10.10'
$env:NO_PROXY = '.contoso.com'
DefaultProxy https://www.contoso.com
Run Code Online (Sandbox Code Playgroud)
然后我得到:https://www.contoso.com/ 的目标代理是http://10.11.10.10/ True
大概 DefaultProxy 逻辑将使用 IsBypassed 结果为 true 来停止 NO_PROXY 列表上的代理。
| 归档时间: |
|
| 查看次数: |
1859 次 |
| 最近记录: |