HTTPCLIENT 4不起作用的代理设置



我正在使用apache httpclient库连接到URL。我正在做的网络具有安全的代理。当我使用java.net软件包连接到URL时,我只需要添加

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

不需要传递代理用户ID和密码,但是当我尝试通过httpclient连接时,我将获得407 代理身份验证错误 .my代码是:

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

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

我已升级到 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程序那样选择系统代理。

为了挑选系统属性,您可以使用SystemDefaulthttpClient而不是DefaulthttpClient。

从httpclient 4.3开始,此类已被弃用,而不是httpclientbuilder:

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

最新更新