2011-04-15 75 views
1

我正在使用HttpClient连接到需要BasicAUTH的主机。但代理不需要任何身份验证。我已经将它设置如下:使用HttpProxy连接到具有预先认证的主机

private final HttpClient httpClient; // Spring injected 

设置基本身份验证:

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 o.a.c.httpclient.HttpMethodDirector - Required proxy credentials not available for BASIC <any realm>@proxy.XXXXXX.no:3128 
WARN o.a.c.httpclient.HttpMethodDirector - Preemptive authentication requested but no default proxy credentials available 

任何想法?

回答

1

下面是来自Apache网站为例进行代理W/O凭据:

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(Mac OS X和Windows的http://www.proxifier.com/)或CNTLM(http://cntlm.sourceforge.net/)的工具很多更简单,更灵活,更易于调试,并保持代码清洁。

+0

您是否考虑过我通过代理连接的主机确实需要我设置BasicAUTH进行身份验证?这个例子看起来很好,但我的问题是,代理不需要身份验证,但我代理的主机却可以。这似乎是我错误地配置了一些东西,因为代理假定我希望它使用BasicAUTH参数。 – 2011-04-16 01:34:45

相关问题