使用HttpProxy通过preemtive身份validation连接到主机

我正在使用HttpClient连接到需要BasicAUTH的主机。 但代理不需要任何身份validation。 我把它设置如下:

private final HttpClient httpClient; // Spring injected 

设置基本身份validation:

 private void setBasicAuth(final String username, final String password) { httpClient.getState().setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), new UsernamePasswordCredentials(username, password)); httpClient.getParams().setAuthenticationPreemptive(true); } 

设置代理:

 private void setProxy(final String proxyHost, final int proxyPort) { hostConfiguration hostConfiguration = httpClient.getHostConfiguration(); hostConfiguration.setProxy(proxyHost, proxyPort); } 

但是在运行代码时我收到以下警告。 一切正常,但我也想摆脱警告(或至少理解它们出现的原因)

 WARN oachttpclient.HttpMethodDirector - Required proxy credentials not available for BASIC @proxy.XXXXXX.no:3128 WARN oachttpclient.HttpMethodDirector - Preemptive authentication requested but no default proxy credentials available 

有任何想法吗?

以下是来自Apache站点的代理无w凭证的示例:

http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientExecuteProxy.java

(来自http://hc.apache.org/httpcomponents-client-ga/examples.html )

您收到错误是因为您传递了用户名/密码而不需要。

WARN消息来自记录器(http://hc.apache.org/httpcomponents-client-ga/logging.html) – 根据您设置记录器的方式,您可以忽略它。

花了太多时间处理试图使Java应用程序处理代理服务器,我可以告诉你使用Proxifier( http://www.proxifier.com/ for Mac OS X and Windows)或CNTLM等工具( http://cntlm.sourceforge.net/ )更容易,更灵活,更容易调试,并保持代码清洁。