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

hea*_*ach 3 java apache authentication proxy http

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

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

CloseableHttpClient一般如何构建以允许此代理身份验证?有人可以给我一个简短的示例,说明如何允许代理身份验证吗?
双代理身份验证(我的代理+外部代理)也可以工作吗?

hea*_*ach 6

请参阅此处的 “请求配置”部分。简而言之:

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!!!
Run Code Online (Sandbox Code Playgroud)

2.)然后像这样建立您的需求:

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

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);
Run Code Online (Sandbox Code Playgroud)

希望这对某人有帮助。