使用 HttpClient 类时如何对代理进行身份验证?
Posted
技术标签:
【中文标题】使用 HttpClient 类时如何对代理进行身份验证?【英文标题】:How to authenticate against a proxy when using the HttpClient class? 【发布时间】:2012-03-22 18:04:28 【问题描述】:我有一个基于 .NET 4 构建的控制台应用程序,它使用 HttpClient
库(通过 NuGet 获得)通过 Internet 从公共 API 检索数据。控制台应用程序位于代理后面。它所在的 Windows 计算机在 Internet Explorer 中具有正确的代理设置。当控制台应用程序尝试访问外部世界时,它会收到 407 状态 - “需要代理身份验证”。
我还没有编写任何特定的代码来处理代理。我从 407 错误中假设应用程序指向代理没有问题,但代理没有对请求进行身份验证。
我的问题是,是否可以将 HttpClient 设置为使用登录用户的凭据来验证代理?如果是这样,怎么做?
var client = new HttpClient(webRequestHandler);
client.PostAsync(RequestUri, MyContent);
【问题讨论】:
【参考方案1】:我设法通过 app.config 中的代理配置非常简单地解决了我的问题。
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
http://msdn.microsoft.com/en-us/library/dkwyc043.aspx
【讨论】:
【参考方案2】:如果您想以编程方式执行相同操作,可以使用以下代码:
WebRequest.DefaultWebProxy.Credentials = CredentialCache.DefaultNetworkCredentials;
(这些对象来自 `System.Net' 命名空间)。
来自 MSDN 的更多信息:http://msdn.microsoft.com/en-us/library/system.net.webproxy.getdefaultproxy.aspx
【讨论】:
以上是关于使用 HttpClient 类时如何对代理进行身份验证?的主要内容,如果未能解决你的问题,请参考以下文章
具有身份验证的 Apache HttpClient Socks5 代理
HttpClient的。在自动发现的代理上进行身份验证的默认凭据
csharp 使用基本身份验证和代理的简单C#.NET 4.5 HTTPClient请求