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

com.cats.https.CHttpClient Maven / Gradle / Ivy

package com.cats.https;

import com.cats.common.executor.CRetry;
import com.cats.common.logger.CLogger;
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 javax.ws.rs.core.UriBuilder;

public class CHttpClient {
    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);
        }
    }

    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);
        }
    }

    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);
        }
    }

    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().updateSessionWithResponse(response);
        }
        logger.trace("Response ::> " + response);
        return response;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy