2015-04-01 271 views
2

我的應用程序對不同的目標執行https請求,現在我有一個代理問題。org.apache.http.impl.client.CloseableHttpClient代理身份驗證

當客戶端連接到目標服務器時,我從目標服務器獲得407(需要代理驗證)。要清楚:客戶端已經在www中訪問其他服務器。

我該如何構建CloseableHttpClient以允許此代理驗證?有人可以給我一個簡短的例子如何允許代理身份驗證?
雙代理身份驗證(我的代理+外部代理)也可以嗎?

回答

3

請參閱「請求配置」部分here。總之:

1)建立你的客戶:

RequestConfig defaultRequestConfig = RequestConfig.custom() 
    .setSocketTimeout(5000) 
    .setConnectTimeout(5000) 
    .setConnectionRequestTimeout(5000) 
    .setStaleConnectionCheckEnabled(true) 
    .build(); 

CloseableHttpClient httpclient = HttpClients.custom() 
    .(settingXY) 
    .setDefaultCookieStore(defaultCookieStore) 
    .setDefaultCredentialsProvider(defaultCredentialsProvider) 
    .setDefaultRequestConfig(defaultRequestConfig) 
    .setDefaultRequestConfig(defaultRequestConfig) 
    .build(); 
//You dont need to specify proxy here!!! 

2)然後建立自己的reqeuest(S)是這樣的:

HttpGet httpget = new HttpGet("http://www.apache.org/"); 
RequestConfig requestConfig = RequestConfig.copy(defaultRequestConfig) 
    .setProxy(new HttpHost("myproxy", 8080)) 
    .build(); 
httpget.setConfig(requestConfig); 

3)然後

defaultCredentialsProvider.setCredentials(new AuthScope(proxy.getHostName(), proxy.getPort()), proxyCredentials); 

HttpGet httpget = new HttpGet("http://www.apache.org/"); 
HttpUriRequest request= httpget; 
CloseableHttpResponse response = httpclient.execute(request, context); 

希望這可以幫助某人。