0

我正在使用 Apache HttpClient 库连接到 url。我正在做的网络有一个安全代理。当我使用 java.net 包连接到 url 时,我只需要添加

System.setProperty("http.proxyHost", proxy);
System.setProperty("http.proxyPort", proxyPort); 

不需要传递代理用户名和密码,但是当我尝试通过 httpclient 连接时,我收到 407代理身份验证错误。我的代码是:

HttpHost proxy = new HttpHost("xyz.abc.com",8080,"http");
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);

代理正在使用 NTML 身份验证。我不想传递用户名和密码。

4

2 回答 2

1

我已经升级到httpclient 4.2,并且这个版本有开箱即用的 NTML 支持。只需在代码中添加以下几行

HttpClient httpclient = new DefaultHttpClient();
NTCredentials creds = new NTCredentials("user", "pwd", "myworkstation", "microsoft.com");
httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);

如需进一步阅读 H​​ttpclent 身份验证方案,您可以参考http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#d5e947

但是我的问题仍然悬而未决,为什么 HttpClent 没有像简单的 java 程序那样选择系统代理。

于 2012-12-30T11:42:14.710 回答
0

为了获取系统属性,您可以使用SystemDefaultHttpClient而不是 DefaultHttpClient。

从 HttpClient 4.3 开始,此类已被弃用,取而代之的是HttpClientBuilder

HttpClient hc = new HttpClientBuilder().useSystemProperties().build();
于 2014-08-06T11:46:30.723 回答