Http客户端。在自动发现的代理上进行身份验证的默认凭据

Posted

技术标签:

【中文标题】Http客户端。在自动发现的代理上进行身份验证的默认凭据【英文标题】:HttpClient. Default credentials to authenticate on auto discovered proxy 【发布时间】:2018-12-26 12:23:28 【问题描述】:

控制狂免责声明:是的,有很多关于 HttpClient 和代理的问题,但他们至少使用了一个

显式(非默认)代理凭据 显式(非 WPAD)代理配置 已弃用 Api,例如。 G。 WebProxy.GetDefaultProxy、WebRequest 等。

根据dotnet developers

如果HttpClientHandler.Proxy的默认值为null,那么HttpClientHandler会使用IE代理设置

所以要使用 HttpClient 设置正确的公司代理,我们不需要任何额外的操作,只需

_client = new HttpClient()

并且没有官方方法可以选择代理。 但是我怎样才能通过默认的 AD 凭据在自动发现的代理上进行身份验证呢? 我刚刚收到“(407) 需要代理身份验证。”

附:可能还有另一个问题,并且在特殊帐户下作为服务运行(尤其是在 Linux 上),此代码没有 IE 设置可供使用。所以我们需要重新实现WPAD。

【问题讨论】:

得到 407 响应的机器的dotnet --version 是什么? @StevenLiekens 目前我的服务编译为 .Net Framework 4.5,在服务器上显示。它没有 dotnet 实用程序。仍然会很高兴获得涵盖.Net的惯用答案,本质上不是特定的旧版本。 【参考方案1】:

您可以通过 HttpClient 使用类似这样的代码将凭据传递给默认系统代理:

var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
var client = new HttpClient(handler);

【讨论】:

那么和之前的.Net 4.7 HttpClientHandler 没有DefaultProxyCredentials 属性一样,我应该使用WebRequest.DefaultWebProxy 创建WebProxy 然后配置他的凭据? 哦,我找到了!早期的 4.7 我们在 app.config 中需要 <defaultProxy enabled="true" useDefaultCredentials="true" ><proxy usesystemdefault="true" autoDetect="true"/></defaultProxy>。现在很清楚了。 其实对于pre 4.7,你可以这样做:WebRequest.DefaultWeb.Proxy.Credentials = CredentialCache.DefaultCredentials; @David-MSFT,猜你的意思是 WebRequest.DefaultWebProxy.Credentials ...(WebRequest.DefaultWeb 不存在)。 @Serg 的 app.config 似乎也可以工作。我花了一些时间来找出正确的语法。 defaultProxy 节点必须嵌套在 元素中。 docs.microsoft.com/en-us/dotnet/framework/configure-apps/…

以上是关于Http客户端。在自动发现的代理上进行身份验证的默认凭据的主要内容,如果未能解决你的问题,请参考以下文章

C# SMTP 无法在 Outlook.com 端口 587 上进行身份验证。“服务器响应为:5.7.1 客户端未通过身份验证”

静默刷新在 OPTIONS 预检上进行身份验证,但不在 GET 到 UserInfo 端点上进行身份验证

客户端是不是应该在每条路由上进行身份验证? [关闭]

通过 SSH 隧道在 PostgreSQL 上进行身份验证失败

在 Glassfish 上进行领域身份验证后重定向

iOS Facebook SDK 在设备上进行身份验证后未重定向