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