001/*- 002 * #%L 003 * Smile CDR - CDR 004 * %% 005 * Copyright (C) 2016 - 2025 Smile CDR, Inc. 006 * %% 007 * All rights reserved. 008 * #L% 009 */ 010package ca.cdr.test.app.clients.common; 011 012import jakarta.annotation.Nonnull; 013import org.apache.hc.client5.http.config.ConnectionConfig; 014import org.apache.hc.client5.http.config.RequestConfig; 015import org.apache.hc.client5.http.cookie.BasicCookieStore; 016import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; 017import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; 018import org.apache.hc.client5.http.socket.ConnectionSocketFactory; 019import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory; 020import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; 021import org.apache.hc.core5.http.URIScheme; 022import org.apache.hc.core5.http.config.Registry; 023import org.apache.hc.core5.http.config.RegistryBuilder; 024import org.apache.hc.core5.pool.PoolConcurrencyPolicy; 025import org.apache.hc.core5.pool.PoolReusePolicy; 026import org.apache.hc.core5.util.TimeValue; 027import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; 028 029import java.util.concurrent.TimeUnit; 030 031public class RequestFactoryUtil { 032 033 /** 034 * Set a massive timeout 035 * Disable Redirects. 036 * Set up local cookie storage. 037 */ 038 public static @Nonnull HttpComponentsClientHttpRequestFactory buildSmileRequestFactory() { 039 Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() 040 .register(URIScheme.HTTP.id, PlainConnectionSocketFactory.getSocketFactory()) 041 .register(URIScheme.HTTPS.id, SSLConnectionSocketFactory.getSocketFactory()) 042 .build(); 043 044 TimeValue ttl = TimeValue.of(5, TimeUnit.SECONDS); 045 046 ConnectionConfig connectionConfig = ConnectionConfig.custom() 047 .setConnectTimeout(10, TimeUnit.MINUTES) 048 .setSocketTimeout(10, TimeUnit.MINUTES) 049 .build(); 050 051 PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager( 052 socketFactoryRegistry, PoolConcurrencyPolicy.LAX, PoolReusePolicy.LIFO, ttl); 053 connectionManager.setMaxTotal(99); 054 connectionManager.setDefaultMaxPerRoute(99); 055 connectionManager.setDefaultConnectionConfig(connectionConfig); 056 057 HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); 058 BasicCookieStore cookieStore = new BasicCookieStore(); 059 httpClientBuilder.setDefaultCookieStore(cookieStore); 060 httpClientBuilder.disableRedirectHandling(); 061 httpClientBuilder.setConnectionManager(connectionManager); 062 063 RequestConfig requestConfig = RequestConfig.custom() 064 .setConnectionRequestTimeout(600000, TimeUnit.MILLISECONDS) 065 .build(); 066 httpClientBuilder.setDefaultRequestConfig(requestConfig); 067 068 HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClientBuilder.build()); 069 return requestFactory; 070 }}