org.apache.http.impl.client.CloseableHttpClient代理验证

时间:2015-04-01 07:33:07

标签: java apache http authentication proxy

我的应用程序对不同的目标执行https请求,现在我遇到了代理问题。

当客户端连接到目标时,我从目标服务器获得407(需要代理身份验证)。需要说明的是:客户端已经到达www中的其他服务器。

我如何构建CloseableHttpClient以便允许此代理身份验证?有人能给我一个简短的示例如何允许代理身份验证吗?
双代理身份验证(我的代理+外部代理)是否也有效?

1 个答案:

答案 0 :(得分:4)

参见"请求配置"第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。)然后建立你的需求:

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);

希望这有助于某人。