使用 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请求

无法使用 HttpClient 对 ASP.NET Web Api 服务进行身份验证

使用 HTTPClient 进行两种身份验证

如何使用 wininet.dll 对代理进行身份验证?