On 10 Feb 2022, at 10:26, Naber, Peter <peter.na...@alfa.de> wrote:
Hi,
ok, than a little bit more code 😊
public CloseableHttpClient getHttpClient() throws IOException,
NoSuchAlgorithmException {
final SocketConfig socketConfig =
SocketConfig.custom().setTcpNoDelay(true).setSoKeepAlive(true).build();
String tlsString = System.getProperty("https.protocols");
if ((tlsString == null) || tlsString.isEmpty()) {
tlsString = "";
final String[] protocols =
SSLContext.getDefault().getSupportedSSLParameters().getProtocols();
for (final String protocol : protocols) {
if (protocol.startsWith("TLS")) {
tlsString = tlsString.length() == 0 ? tlsString +
protocol : tlsString + "," + protocol;
}
}
}
final PoolingHttpClientConnectionManager connManager =
PoolingHttpClientConnectionManagerBuilder.create()
.setConnectionFactory(this.connFactory).setDnsResolver(new
SystemDefaultDnsResolver())
.setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create().setSslContext(this.sslContext)
.setTlsVersions(tlsString.split(",")).build())
.setDefaultSocketConfig(socketConfig).setValidateAfterInactivity(TimeValue.ofSeconds(10L)).build();
this.defaultRequestConfig =
RequestConfig.custom().setCookieSpec(StandardCookieSpec.RELAXED)
.setAuthenticationEnabled(true).setExpectContinueEnabled(false).setContentCompressionEnabled(true)
.setConnectionRequestTimeout(Timeout.ofMilliseconds(this.getConnectionRequestTimeout()))
.setConnectTimeout(Timeout.ofMilliseconds(this.getConnectTimeout()))
.setResponseTimeout(Timeout.ofMilliseconds(this.getSocketTimeout()))
.setRedirectsEnabled(this.getRedirect()).setCircularRedirectsAllowed(false)
.setTargetPreferredAuthSchemes(
Arrays.asList(StandardAuthScheme.DIGEST, StandardAuthScheme.BASIC,
StandardAuthScheme.NTLM))
.setProxyPreferredAuthSchemes(Arrays.asList(StandardAuthScheme.BASIC,
StandardAuthScheme.NTLM)).build();
final RedirectStrategy redirectStrategy = new
DefaultRedirectStrategy();
final CachingHttpClientBuilder cachingHttpClients =
CachingHttpClients.custom();
cachingHttpClients.setCacheConfig(this.getHttpCacheConfig().getCacheConfig()).setConnectionManager(connManager)
.setRedirectStrategy(redirectStrategy).setDefaultCookieStore(this.getCookieStore())
.setDefaultRequestConfig(this.defaultRequestConfig);
if (this.getHttpCacheConfig().getCacheFileName() != null) {
cachingHttpClients.setCacheDir(new
File(this.getHttpCacheConfig().getCacheFileName()));
}
final HttpClientBuilder httpBuild = cachingHttpClients;
httpBuild.addExecInterceptorBefore("test", "compress", new
ContentCompressionExec());
if (this.getHttpProxy() != null) {
final HttpProxy hproxy = this.getHttpProxy();
this.proxy = new HttpHost(hproxy.getHost(),
hproxy.getPort());
httpBuild.setProxy(this.proxy);
httpBuild.setRoutePlanner(new
DefaultProxyRoutePlanner(this.proxy) {
@Override
protected HttpHost determineProxy(final
HttpHost target, final HttpContext context)
throws HttpException {
if (ExecuteHttp.this.httpProxy == null)
{
return null;
}
if
(ExecuteHttp.this.httpProxy.getProxyNonHosts() != null) {
for (final String proxy1 :
ExecuteHttp.this.httpProxy.getProxyNonHosts()) {
try {
if
(target.getHostName().matches(proxy1)) {
return
null;
}
} catch (final
Exception e) {
e.printStackTrace();
}
}
}
return super.determineProxy(target,
context);
}
});
}
final CloseableHttpClient httpClient = httpBuild.build();
return httpClient;
}
private void basicRequest(final String basicCommand, final String
urls1) throws Exception {
int status = 0;
String returnString = "";
try (CloseableHttpClient httpClient = this.getHttpClient()) {
for (final String url :
this.getURL(this.replace(urls1))) {
final HttpUriRequestBase basicRequest = new
HttpUriRequestBase(basicCommand, new URI(url));
final URL aURL = new URL(url);
this.setHeaders(basicRequest);
final HttpCacheContext context =
this.getHttpCacheContext(aURL);
this.log.info("[basicRequest] " +
basicRequest.getRequestUri());
final CloseableHttpResponse response =
httpClient.execute(basicRequest, context);
try {
status = response.getCode();
...
Regards,
Peter
-----Ursprüngliche Nachricht-----
Von: Christophe Darville <c...@internetvista.com>
Gesendet: Donnerstag, 10. Februar 2022 08:42
An: HttpClient User Discussion <httpclient-users@hc.apache.org>
Betreff: Re: Preemptive authentication in Http Client 5 Async
Hi Peter,
Thank you for your answer. Once you get an HttpCacheContext instance, how do
you link it with the request ? I see no setter on the HttpClient nor on the
RequestConfig.
Regards,
Christophe
On 9 Feb 2022, at 17:15, Naber, Peter <peter.na...@alfa.de> wrote:
Hi,
I use the HttpCacheContext but I think with the httpclient5 the preemtive
authentication is implemented the same way.
public HttpCacheContext getHttpCacheContext(final URL aURL) throws
Exception {
final HttpHost targetHost = new HttpHost(aURL.getProtocol(),
aURL.getHost(), aURL.getPort()==-1?aURL.getDefaultPort():aURL.getPort());
final HttpCacheContext context = HttpCacheContext.create();
final AuthCache authCache = new BasicAuthCache();
if (this.getPreAuth() && this.getUser()!= null &&
this.getPassword()!=null ) {
if (this.getAuthScheme() == AuthScheme.BASIC) {
final BasicScheme basicAuth = new BasicScheme();
basicAuth.initPreemptive(
new
UsernamePasswordCredentials(this.getUser(), this.getPassword().toCharArray()));
authCache.put(targetHost, basicAuth);
} else if (this.getAuthScheme() == AuthScheme.DIGEST) {
final DigestScheme digestScheme = new
DigestScheme();
final UsernamePasswordCredentials creds = new
UsernamePasswordCredentials(this.replace(this.getUser()),
this.replace(this.getPassword()).toCharArray());
digestScheme.initPreemptive(creds,
UUID.randomUUID().toString().replaceAll("-", ""), "vectorius");
authCache.put(targetHost, digestScheme);
}
context.setAuthCache(authCache);
}
context.setCredentialsProvider(this.getCredentialsProvider(aURL));
return context;
}
regards,
Peter
-----Ursprüngliche Nachricht-----
Von: Christophe Darville <c...@internetvista.com>
Gesendet: Mittwoch, 9. Februar 2022 17:00
An: HttpClient User Discussion <httpclient-users@hc.apache.org>
Betreff: Preemptive authentication in Http Client 5 Async
Hi,
I am trying to make preemptive authentication in HttpClient 5 Async mode using
the following code, but I does not work, first request is still without
authentication and the authentication is done on the second request :
HttpClientContext httpContext = HttpClientContext.create();
CredentialsProvider credentialsProvider = getCredentialsProvider();
if (preemptive) {
URI uri = URI.create(url);
HttpHost targetHost = new HttpHost(uri.getScheme(),
uri.getHost(), uri.getPort());
AuthCache authCache = new BasicAuthCache();
BasicScheme basicAuth = new BasicScheme();
authCache.put(targetHost, basicAuth);
httpContext.setAuthCache(authCache);
}
httpContext.setCredentialsProvider(credentialsProvider);
This code was working in httpClient 4. Any suggestion on how to make preemptive
authentication work in HttpClient5 Async ?
Thank you,
Christophe
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
For additional commands, e-mail: httpclient-users-h...@hc.apache.org