HttpClientUtil 包括get和post方法。发送Httppost或Httpget请求有三个步骤:1、为执行excute方法,创建CloseableHttpclient对象2、创建Httppost或Httpget请求对象3、执行请求,判断返回状态,接收响应对象
public class HttpClientUtil { /*** * 编码集 */ private final static String CHAR_SET = "UTF-8"; /*** * Post表格请求形式 */ private final static String CONTENT_TYPE_POST_FORM = "application/x-www-form-urlencoded"; /*** * Post Json请求头 */ private final static String CONTENT_TYPE_JSON = "application/json"; /*** * 连接管理器 */ private static PoolingHttpClientConnectionManager poolManager; /*** * 请求配置 */ private static RequestConfig requestConfig; static { // 静态代码块,Htppclinet连接池配置信息的初始化,同时支持http和https try { System.out.println(初始化连接池-------->>>>开始"); // 使用SSL连接Httpsss SSLContextBuilder builder = new SSLContextBuilder(); builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); SSLContext sslContext = builder.build(); // 建立SSL连接工厂 SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext); Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", sslConnectionSocketFactory).build(); // 连接管理器的初始化 poolManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry); // 设置最大连接数 poolManager.setMaxTotal(1000); // 设置最大路由 poolManager.setDefaultMaxPerRoute(300); // 从连接池获得连接超时间 int coonectionRequestTimeOut = 5000; // 建立连接客户端和服务器的超时间 int connectTimeout = 5000; // 客户端从服务器建立超时连接 int socketTimeout = 5000; requestConfig = RequestConfig.custom().setConnectionRequestTimeout(coonectionRequestTimeOut) .setConnectTimeout(connectTimeout) .setSocketTimeout(socketTimeout).build(); System.out.println(初始化连接池-------->>>>结束"); } catch (Exception e) { e.printStackTrace(); System.out.println(初始化连接池-------->>>>失败"); } } public static String doGet(String url, Map<String, String> params) { String result = ""; // 获取http客户端 // CloseableHttpClient httpClient = getCloseableHttpClient(); // 从连接池中获取http客户端 CloseableHttpClient httpClient = getCloseableHttpClientFromPool(); // 响应模型 CloseableHttpResponse httpResponse = null; try { // 创建URI 拼接请求参数 URIBuilder uriBuilder = new URIBuilder(url); // uri拼接参数 if (null != params) { Iterator<Map.Entry<String, String>> it = params.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> next = it.next(); uriBuilder.addParameter(next.getKey(), next.getValue()); } } URI uri = uriBuilder.build(); // 创建Get请求 HttpGet httpGet = new HttpGet(uri); httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { // 获取响应实体 HttpEntity httpEntity = httpResponse.getEntity(); if (null != httpEntity) { result = EntityUtils.toString(httpEntity, CHAR_SET); System.out.println(“响应内容:” + result); return result; } } StatusLine statusLine = httpResponse.getStatusLine(); int statusCode = statusLine.getStatusCode(); System.out.println“响应码:” + statusCode); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != httpResponse) { httpResponse.close(); } if (null != httpClient) { httpClient.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } private static CloseableHttpClient getCloseableHttpClient() { return HttpClientBuilder.create().build(); } /** * 连接从http连接池中获取 */ private static CloseableHttpClient getCloseableHttpClientFromPool() { // ServiceUnavailableRetryStrategy serviceUnavailableRetryStrategy = new ServiceUnavailableRetryStrategy() { @Override public boolean retryRequest(HttpResponse httpResponse, int executionCount, HttpContext httpContext) { if (executionCount < 3) { System.out.println("ServiceUnavailableRetryStrategy"); return true; } else { return false; } } // 重试时间间隔 @Override public long getRetryInterval() { return 3000L; } }; // 设置连接池管理 CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(poolManager) // 设置要求配置策略 .setDefaultRequestConfig(requestConfig) // 设置重试次数 .setRetryHandler(new DefaultHttpRequestRetryHandler()).build(); return httpClient; } /** * Post请求,表单形式 */ public static String doPost(String url, Map<String, String> params) { String result = ""; // 获取http客户端 CloseableHttpClient httpClient = getCloseableHttpClient(); // 响应模型 CloseableHttpResponse httpResponse = null; try { // Post提交包装参数列表 ArrayList<NameValuePair> postParamsList = new ArrayList<>(); if (null != params) { Iterator<Map.Entry<String, String>> it = params.entrySet().iterator(); while (it.hasNext()) { Map.Entry<String, String> next = it.next(); postParamsList.add(new BasicNameValuePair(next.getKey(), next.getValue())); } } // 创建Uri UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(postParamsList, CHAR_SET); // 设置表达请求的类型 urlEncodedFormEntity.setContentType(CONTENT_TYPE_POST_FORM); HttpPost httpPost = new HttpPost(url); // 设置请求体 httpPost.setEntity(urlEncodedFormEntity); // 执行post请求 httpResponse = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == 200) { result = EntityUtils.toString(httpResponse.getEntity(), CHAR_SET); //System.out.println("Post form reponse {}" + result); return result; } } catch (Exception e) { e.printStackTrace(); } finally { try { CloseResource(httpClient, httpResponse); } catch (Exception e) { e.printStackTrace(); } } return result; } private static void CloseResource(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) throws IOException { if (null != httpResponse) { httpResponse.close(); } if (null != httpClient) { httpClient.close(); } } /*** * Post请求,Json形式 */ public static String doPostJson(String url, String jsonStr) { String result = ""; CloseableHttpClient httpClient = getCloseableHttpClient(); CloseableHttpResponse httpResponse = null; try { // 创建Post HttpPost httpPost = new HttpPost(url); // 包装要求参数 StringEntity stringEntity = new StringEntity(jsonStr, CHAR_SET); // 设置请求参数封装形式 stringEntity.setContentType(CONTENT_TYPE_JSON); httpPost.setEntity(stringEntity); httpResponse = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == 200) { result = EntityUtils.toString(httpResponse.getEntity(), CHAR_SET); System.out.println(result); return result; } } catch (Exception e) { e.printStackTrace(); } finally { try { CloseResource(httpClient, httpResponse); } catch (Exception e) { e.printStackTrace(); } } return result; } public static void main(String[] args) { // get 请求 //String getUrl = "https://www.baidu.com/s"; //String getUrl = "http://localhost:9888/boxes/getprojectdaystats"; //String getUrl = "https://gw.alipayobjects.com/os/antvdemo/assets/data/algorithm-category.json"; //Map m = new HashMap(); // m.put("year","2023"); // m.put("age","123"); //String result = doGet(getUrl,m ); // System.out.println("result = " + result); //Post 请求 baocuo // String postUrl = "http://localhost:8088/device/factmag/getInfo"; // Map m = new HashMap(); //m.put("Authorization","Bearer JhbGciOiJIUzUxMiJ9.J1c2VyX2lkIjoxLCJ1c2VyX2tleSI6IjNkNmI3ZTFJU0ZjgtNGE2NS1iMTY1LTE2NjczYZM1MWIxZZJuYW1leJ1YWRtaWRtaW4ZGGE2NGE2ZJuYifQ.AyLFDY9PjpwinaidbdvpspspspaspasphowsplflSFL2SngFL2SngTOSSUSCCCSSCCCOGhRygg"); //m.put("facregCode","999999"); // String s = doPost(postUrl, m); //System.out.println("s = " + s); //String postJsonUrl = "http://127.0.0.1:8080/testHttpClientUtilPostJson"; /* User user = new User(); user.setUid("123"); user.setUserName(小明); user.setAge("18"); user.setSex("男"); String jsonStr = JSON.toJSONString(user); doPostJson(postJsonUrl,jsonStr); */ // System.out.println(s); // System.out.println(result); }}
