0

我正在使用Apache HttpClient库连接到url。我在做的网络有一个安全的代理。当我使用java.net包连接到URL我只需要添加HttpClient 4的代理设置不起作用

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

无代理的用户ID和需要密码才能通过,但是当我试图通过HttpClient的连接我得到407 代理验证错误。我的代码是:

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

代理是使用NTML authentication.I不想通过用户名和密码。

+0

最近的答案我觉得是计算器: http://stackoverflow.com/questions/6962047/apache-httpclient -4-1-proxy-authentication 我只是认为你的Windows系统的NTLM证书不能从你的java层访问,然后你需要重新认证到代理。我可能错了。 –

+0

首先,我认为HttpClient中没有NTML支持,其次,凭证更改频率很高,所以我不能以这种方式使用。如果它可用于java.net包URLConnect,则可以通过java层访问我的Windows系统的凭证,以便它也可以用于httpclient库。 –

回答

1

我已升级到httpclient 4.2并且此版本具有开箱即用的NTML支持。只需要下面几行添加到代码

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

进一步的阅读Httpclent认证方案ü可以参考http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html#d5e947

但我的问题仍然是开放的,为什么HttpClent不采摘系统代理作为简单的Java程序做。

0

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

由于HttpClient的4.3,这一类被弃用,取而代之的HttpClientBuilder

HttpClient hc = new HttpClientBuilder().useSystemProperties().build();