All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.catools.ws.https.CHttpClient Maven / Gradle / Ivy

package org.catools.ws.https;

import org.apache.http.client.methods.*;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.catools.common.executor.CRetry;
import org.catools.common.logger.CLogger;

import javax.ws.rs.core.UriBuilder;

import static org.catools.ws.session.CSession.*;

/**
 * Http Client to perform Delete / Get / Post / Put against target application using apache http client.
 */
public class CHttpClient {
    /**
     * Process Delete request and return the response
     * @param logger logger to be used during request processing
     * @param request {@link CHttpRequest} or {@link CHttpsRequest} request to be process
     * @return {@link CHttpResponse} with the execution result
     */
    public static CHttpResponse delete(CLogger logger, CHttpRequest request) {
        try {
            UriBuilder builder = buildUri(logger, request);
            HttpDelete httpHttpDelete = new HttpDelete(builder.build().normalize());
            return processRequest(logger, httpHttpDelete, request);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Process Get request and return the response
     * @param logger logger to be used during request processing
     * @param request {@link CHttpRequest} or {@link CHttpsRequest} request to be process
     * @return {@link CHttpResponse} with the execution result
     */
    public static CHttpResponse get(CLogger logger, CHttpRequest request) {
        try {
            UriBuilder builder = buildUri(logger, request);
            HttpGet httpGet = new HttpGet(builder.build().normalize());
            return processRequest(logger, httpGet, request);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Process Post request and return the response
     * @param logger logger to be used during request processing
     * @param request {@link CHttpRequest} or {@link CHttpsRequest} request to be process
     * @return {@link CHttpResponse} with the execution result
     */
    public static CHttpResponse post(CLogger logger, CHttpRequest request) {
        try {
            UriBuilder builder = buildUri(logger, request);
            HttpPost httpPost = new HttpPost(builder.build().normalize());
            if (request.getEntity() != null) {
                httpPost.setEntity(request.getEntity());
            }
            return processRequest(logger, httpPost, request);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * Process Put request and return the response
     * @param logger logger to be used during request processing
     * @param request {@link CHttpRequest} or {@link CHttpsRequest} request to be process
     * @return {@link CHttpResponse} with the execution result
     */
    public static CHttpResponse put(CLogger logger, CHttpRequest request) {
        try {
            UriBuilder builder = buildUri(logger, request);
            HttpPut httpPut = new HttpPut(builder.build().normalize());
            if (request.getEntity() != null) {
                httpPut.setEntity(request.getEntity());
            }
            return processRequest(logger, httpPut, request);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private static UriBuilder buildUri(CLogger logger, CHttpRequest request) {
        logger.trace("Processing Request: \n" + request);
        UriBuilder builder = UriBuilder.fromUri(request.getTargetURL());
        if (request.getQueryParameters() != null) {
            request.getQueryParameters().forEach(kv -> builder.queryParam(kv.getName(), kv.getValue()));
        }
        return builder;
    }

    private static CHttpResponse processRequest(CLogger logger, HttpUriRequest request, CHttpRequest cHttpRequest) {
        HttpClientBuilder clientBuilder = HttpClients.custom();
        if (cHttpRequest.getSession() != null && cHttpRequest.getSession().getCookieStore() != null) {
            clientBuilder.setDefaultCookieStore(cHttpRequest.getSession().getCookieStore());
        }

        if (cHttpRequest instanceof CHttpsRequest) {
            if (((CHttpsRequest) cHttpRequest).getSSLConnectionSocketFactory() != null) {
                clientBuilder.setSSLSocketFactory(((CHttpsRequest) cHttpRequest).getSSLConnectionSocketFactory());
            }

            if (((CHttpsRequest) cHttpRequest).getSSLContext() != null) {
                clientBuilder.setSSLContext(((CHttpsRequest) cHttpRequest).getSSLContext());
            }
        }

        if (cHttpRequest.getSession() != null && cHttpRequest.getSession().getHeaders() != null) {
            cHttpRequest.getSession().getHeaders().forEach((k, v) -> request.addHeader(k, v));
        }

        CloseableHttpClient build = clientBuilder.build();
        logger.trace("Request ::> " + cHttpRequest);

        CHttpResponse response = CRetry.retryOnError(integer -> {
            try {
                return new CHttpResponse(build.execute(request));
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }, 10, 5000, null);

        if (cHttpRequest.getSession() != null) {
            cHttpRequest.getSession().copyFromResponse(JSESSIONID, response);
            cHttpRequest.getSession().copyFromResponse(CSRFTOKEN, response);
            cHttpRequest.getSession().copyFromResponse(X_CSRF, response);
        }
        logger.trace("Response ::> " + response);
        return response;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy