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