Java high-performance http request tool package

import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.math.BigDecimal;
import java.net.SocketTimeoutException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
 * POM dependencies
 * <dependency>
 * <groupId>org.apache.httpcomponents</groupId>
 * <artifactId>httpclient</artifactId>
 * <version>4.5.12</version>
 * </dependency>
 *
 * <dependency>
 * <groupId>org.apache.httpcomponents</groupId>
 * <artifactId>httpmime</artifactId>
 * <version>4.5.12</version>
 * </dependency>
 */
@SuppressWarnings("all")
@Slf4j
public class HttpClientUtil {
    /**
     * total maximum number of connections
     */
    private static final int MAX_TOTAL_CONNECTIONS = 1000;
    /**
     * The maximum number of connections per http host
     */
    private static final int MAX_CONNECTIONS_PER_ROUTE = 200;
    /**
     * The timeout to establish a connection (in milliseconds)
     */
    private static final int CONNECT_TIMEOUT = 6000;
    /**
     * The timeout (in milliseconds) to get a connection from the connection pool
     */
    private static final int CONNECTION_REQUEST_TIMEOUT = 30000;
    /**
     * The timeout period for waiting for data (that is, the request timeout period) (in milliseconds)
     */
    private static final int SOCKET_TIMEOUT = 120000;
    /**
     * Idle connection cleaning interval (seconds)
     */
    private static final int IDLE_CONNECTION_CLEAR_INTERVAL = 30;
    private static CloseableHttpClient httpClient;
    private static PoolingHttpClientConnectionManager connectionManager;
    private static RequestConfig requestConfig;
    static {
        connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setMaxTotal(MAX_TOTAL_CONNECTIONS);
        connectionManager.setDefaultMaxPerRoute(MAX_CONNECTIONS_PER_ROUTE);
        requestConfig = RequestConfig.custom()
                .setConnectTimeout(CONNECT_TIMEOUT)
                .setConnectionRequestTimeout(CONNECTION_REQUEST_TIMEOUT)
                .setSocketTimeout(SOCKET_TIMEOUT)
                .build();
        httpClient = HttpClients. custom()
                .setConnectionManager(connectionManager)
                .setDefaultRequestConfig(requestConfig)
                // How often to clean up idle connections, connections in use will not be cleaned up
                .evictIdleConnections(IDLE_CONNECTION_CLEAR_INTERVAL, TimeUnit.SECONDS)
                .build();
    }
    /**
     * get request
     *
     * @param uri request address
     * @param getParams get parameters
     * @return response result If the request is abnormal, return null
     */
    public static ResponseResult doHttpGet(String uri, Map<String, Object> getParams) {
        long startTime = System. currentTimeMillis();
        ResponseResult result = new ResponseResult();
        try {
            URIBuilder uriBuilder = new URIBuilder(uri);
            if (null != getParams & amp; & amp; !getParams.isEmpty()) {
                List<NameValuePair> list = new ArrayList<>();
                for (Map.Entry<String, Object> param : getParams.entrySet()) {
                    list.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
                }
                uriBuilder. setParameters(list);
            }
            HttpGet httpGet = new HttpGet(uriBuilder. build());
            try (CloseableHttpResponse response = httpClient. execute(httpGet)) {
                int statusCode = response.getStatusLine().getStatusCode();
                HttpEntity entity = response. getEntity();
                result.setHttpCode(statusCode);
                result.setHttpContent(EntityUtils.toString(entity, "utf-8"));
                // Release resources
                EntityUtils. consume(entity);
                return result;
            }
        } catch (SocketTimeoutException timeoutException) {
            log.error("Request timeout stack information", timeoutException);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_TIMEOUT);
        } catch (Exception e) {
            log.error("request exception stack information", e);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_EXCEPTION);
        } finally {
            long endTime = System. currentTimeMillis();
            log.info("Request time-consuming: [{}]ms", endTime - startTime);
        }
        return result;
    }
    /**
     * post request
     *
     * @param uri request address
     * @param postParams post parameters
     * @return response result If the request is abnormal, return null
     */
    public static ResponseResult doHttpPost(String uri, Map<String, Object> postParams) {
        long startTime = System. currentTimeMillis();
        ResponseResult result = new ResponseResult();
        try {
            HttpPost httpPost = new HttpPost(uri);
            if (null != postParams & amp; & amp; !postParams.isEmpty()) {
                List<NameValuePair> list = new ArrayList<>();
                for (Map.Entry<String, Object> param : postParams.entrySet()) {
                    list.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
                }
                httpPost.setEntity(new UrlEncodedFormEntity(list, "utf-8"));
            }
            try (CloseableHttpResponse response = httpClient. execute(httpPost)) {
                int statusCode = response.getStatusLine().getStatusCode();
                HttpEntity entity = response. getEntity();
                result.setHttpCode(statusCode);
                result.setHttpContent(EntityUtils.toString(entity, "utf-8"));
                // Release resources
                EntityUtils. consume(entity);
                return result;
            }
        } catch (SocketTimeoutException timeoutException) {
            log.error("Request timeout stack information", timeoutException);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_TIMEOUT);
        } catch (Exception e) {
            log.error("request exception stack information", e);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_EXCEPTION);
        } finally {
            long endTime = System. currentTimeMillis();
            log.info("Request time-consuming: [{}]ms", endTime - startTime);
        }
        return result;
    }
    /**
     * post/json request
     *
     * @param uri request address
     * @param json json parameter
     * @return response result If the request is abnormal, return null
     */
    public static ResponseResult doHttpPostJson(String uri, String json) {
        long startTime = System. currentTimeMillis();
        ResponseResult result = new ResponseResult();
        try {
            HttpPost httpPost = new HttpPost(uri);
            httpPost.setHeader("Content-Type", "application/json");
            httpPost.setEntity(new UrlEncodedFormEntity(new ArrayList<>(), "utf-8"));
            httpPost.setEntity(new StringEntity(json, "utf-8"));
            try (CloseableHttpResponse response = httpClient. execute(httpPost)) {
                int statusCode = response.getStatusLine().getStatusCode();
                HttpEntity entity = response. getEntity();
                result.setHttpCode(statusCode);
                result.setHttpContent(EntityUtils.toString(entity, "utf-8"));
                // Release resources
                EntityUtils. consume(entity);
                return result;
            }
        } catch (SocketTimeoutException timeoutException) {
            log.error("Request timeout stack information", timeoutException);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_TIMEOUT);
        } catch (Exception e) {
            log.error("request exception stack information", e);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_EXCEPTION);
        } finally {
            long endTime = System. currentTimeMillis();
            log.info("Request time-consuming: [{}]ms", endTime - startTime);
        }
        return result;
    }
    /**
     * post request upload file
     *
     * @param uri request address
     * @param postParams post parameters
     * @param files file
     * @return response result If the request is abnormal, return null
     */
    public static ResponseResult doHttpPostUpload(String uri, Map<String, Object> postParams, Map<String, File> files) {
        long startTime = System. currentTimeMillis();
        ResponseResult result = new ResponseResult();
        CloseableHttpClient httpClient = null;
        try {
            httpClient = HttpClients.createDefault();
            HttpPost httpPost = new HttpPost(uri);
            if (null != postParams & amp; & amp; !postParams.isEmpty()) {
                List<NameValuePair> list = new ArrayList<>();
                for (Map.Entry<String, Object> param : postParams.entrySet()) {
                    list.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
                }
                httpPost.setEntity(new UrlEncodedFormEntity(list, StandardCharsets.UTF_8));
            }
            if (null != files & amp; & amp; !files. isEmpty()) {
                MultipartEntityBuilder builder = MultipartEntityBuilder. create();
                for (Map.Entry<String, File> fileEntry : files.entrySet()) {
                    builder.addPart(fileEntry.getKey(), new FileBody(fileEntry.getValue(), ContentType.DEFAULT_BINARY, fileEntry.getValue().getName()));
                }
                for (Map.Entry<String, Object> param : postParams.entrySet()) {
                    builder.addPart(param.getKey(), new StringBody(String.valueOf(param.getValue()), ContentType.TEXT_PLAIN));
                }
                httpPost.setEntity(builder.build());
            }
            HttpResponse response = httpClient. execute(httpPost);
            int statusCode = response.getStatusLine().getStatusCode();
            HttpEntity entity = response. getEntity();
            result.setHttpCode(statusCode);
            result.setHttpContent(EntityUtils.toString(entity, StandardCharsets.UTF_8));
            EntityUtils. consume(entity);
            return result;
        } catch (SocketTimeoutException timeoutException) {
            log.error("Request timeout stack information", timeoutException);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_TIMEOUT);
        } catch (Exception e) {
            log.error("request exception stack information", e);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_EXCEPTION);
        } finally {
            long endTime = System. currentTimeMillis();
            log.info("Request time-consuming: [{}]ms", endTime - startTime);
        }
        return result;
    }
    /**
     * post/xml request
     *
     * @param uri request address
     * @param xml xml parameter
     * @return response result If the request is abnormal, return null
     */
    public static ResponseResult doHttpPostXml(String uri, String xml) {
        long startTime = System. currentTimeMillis();
        ResponseResult result = new ResponseResult();
        try {
            HttpPost httpPost = new HttpPost(uri);
            httpPost.setHeader("Content-Type", "application/xml");
            httpPost.setEntity(new UrlEncodedFormEntity(new ArrayList<>(), "utf-8"));
            httpPost.setEntity(new StringEntity(xml, "utf-8"));
            try (CloseableHttpResponse response = httpClient. execute(httpPost)) {
                int statusCode = response.getStatusLine().getStatusCode();
                HttpEntity entity = response. getEntity();
                result.setHttpCode(statusCode);
                result.setHttpContent(EntityUtils.toString(entity, "utf-8"));
                // Release resources
                EntityUtils. consume(entity);
                return result;
            }
        } catch (SocketTimeoutException timeoutException) {
            log.error("Request timeout stack information", timeoutException);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_TIMEOUT);
        } catch (Exception e) {
            log.error("request exception stack information", e);
            result.setHttpCode(ResponseResult.HTTP_CODE_REQUEST_EXCEPTION);
        } finally {
            long endTime = System. currentTimeMillis();
            log.info("Request time-consuming: [{}]ms", endTime - startTime);
        }
        return result;
    }
}
import lombok. Data;
@Data
public class ResponseResult {
    /**
     * Request timed out
     */
    public static final int HTTP_CODE_REQUEST_TIMEOUT = -1;
    /**
     * request exception
     */
    public static final int HTTP_CODE_REQUEST_EXCEPTION = -2;
    /**
     * http response status code
     */
    private int httpCode = 0;
    /**
     * HTTP response content
     */
    private String httpContent;
    /**
     * Determine whether the request is successful (there is no exception and the http status code is 200
     *
     * @param result request result
     * @return true: request successful false: request failed
     */
    public static boolean isRequestSuccess(ResponseResult result) {
        return null != result & amp; & amp; result. getHttpCode() == 200;
    }
}

The knowledge points of the article match the official knowledge files, and you can further learn relevant knowledge Network skill treeHome pageOverview 28746 people are studying systematically