我正在使用Apache HttpClient库连接到url。我正在做的网络有一个安全的代理。当我使用java.net包连接到网址时,我只需要添加
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身份验证。我不想传递用户ID和密码。
答案 0 :(得分: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程序那样选择系统代理。
答案 1 :(得分:0)
为了获取系统属性,您可以使用SystemDefaultHttpClient而不是DefaultHttpClient。
从HttpClient 4.3开始,此类已被弃用,转而使用HttpClientBuilder:
HttpClient hc = new HttpClientBuilder().useSystemProperties().build();