2011-04-15 58 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

相關問題