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.7HttpClientHandler
没有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 节点必须嵌套在 以上是关于Http客户端。在自动发现的代理上进行身份验证的默认凭据的主要内容,如果未能解决你的问题,请参考以下文章
C# SMTP 无法在 Outlook.com 端口 587 上进行身份验证。“服务器响应为:5.7.1 客户端未通过身份验证”
静默刷新在 OPTIONS 预检上进行身份验证,但不在 GET 到 UserInfo 端点上进行身份验证