httpClinent工具类
1 package com.juchn.gateway.common.utils; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.InputStreamReader; 7 import java.security.KeyManagementException; 8 import java.security.KeyStoreException; 9 import java.security.NoSuchAlgorithmException; 10 import java.security.cert.CertificateException; 11 import java.security.cert.X509Certificate; 12 import java.util.ArrayList; 13 import java.util.Iterator; 14 import java.util.List; 15 import java.util.Map; 16 import java.util.Map.Entry; 17 18 import javax.net.ssl.SSLContext; 19 20 import org.apache.commons.lang3.StringUtils; 21 import org.apache.http.HttpEntity; 22 import org.apache.http.HttpHost; 23 import org.apache.http.NameValuePair; 24 import org.apache.http.ParseException; 25 import org.apache.http.client.config.RequestConfig; 26 import org.apache.http.client.entity.UrlEncodedFormEntity; 27 import org.apache.http.client.methods.CloseableHttpResponse; 28 import org.apache.http.client.methods.HttpGet; 29 import org.apache.http.client.methods.HttpPost; 30 import org.apache.http.client.methods.HttpPut; 31 import org.apache.http.client.utils.URLEncodedUtils; 32 import org.apache.http.conn.ssl.NoopHostnameVerifier; 33 import org.apache.http.entity.StringEntity; 34 import org.apache.http.impl.client.CloseableHttpClient; 35 import org.apache.http.impl.client.HttpClients; 36 import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; 37 import org.apache.http.message.BasicNameValuePair; 38 import org.apache.http.ssl.SSLContextBuilder; 39 import org.apache.http.ssl.TrustStrategy; 40 import org.apache.http.util.EntityUtils; 41 import org.slf4j.Logger; 42 import org.slf4j.LoggerFactory; 43 44 /** 45 * 新版httpClient的工具方法 46 * 47 * @author tangzl 48 * @since 2019年04月11日 49 */ 50 public class HttpClientUtil { 51 52 static Logger log = LoggerFactory.getLogger(HttpClientUtil.class); 53 protected static final String CHARSET = "UTF-8"; 54 protected static final String CHARSET_GBK = "UTF-8"; 55 /** 默认超时时间 */ 56 private final static int default_timeout = 10000; 57 58 private static PoolingHttpClientConnectionManager cm = null; 59 60 private static CloseableHttpClient httpclient = null; 61 static { 62 63 // 多连接的线程安全的管理器 64 cm = new PoolingHttpClientConnectionManager(); 65 cm.setDefaultMaxPerRoute(100); // 每个主机的最大并行链接数 66 cm.setMaxTotal(200); // 客户端总并行链接最大数 67 68 httpclient = HttpClients.custom().setConnectionManager(cm).build(); 69 } 70 71 /** 72 * 发送 get请求 73 * 74 * @param url 75 * @param timeout 超时时间 76 * @param ignoreHttps 是否忽略https证书检查 77 * @return 78 */ 79 public static String get(String url, Map<String, String> params, Integer timeout, boolean ignoreHttps, 80 HttpHost proxy) { 81 CloseableHttpClient client = null; 82 if (ignoreHttps) { 83 client = getIgnoreHttpsClient(); 84 } else { 85 client = httpclient; 86 } 87 try { 88 HttpGet httpGet = null; 89 if (params == null) 90 httpGet = new HttpGet(url); 91 else { 92 List<NameValuePair> qparams = new ArrayList<NameValuePair>(); 93 for (Entry<String, String> entry : params.entrySet()) { 94 qparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 95 } 96 String queryParams = URLEncodedUtils.format(qparams, "UTF-8"); 97 if (url.indexOf("?") != -1) { 98 url += "&" + queryParams; 99 } else { 100 url += "?" + queryParams; 101 } 102 httpGet = new HttpGet(url); 103 } 104 timeout = timeout != null ? timeout : default_timeout; 105 RequestConfig.Builder builder = RequestConfig.custom();// 设置请求和传输超时时间 106 if (null != proxy) { 107 builder.setProxy(proxy); 108 } 109 RequestConfig requestConfig = builder.setSocketTimeout(timeout).setConnectTimeout(timeout).build();// 设置请求和传输超时时间 110 httpGet.setConfig(requestConfig); 111 112 CloseableHttpResponse response = client.execute(httpGet); 113 HttpEntity entity = response.getEntity(); 114 try { 115 if (entity != null) 116 return EntityUtils.toString(entity); 117 } finally { 118 if (entity != null) 119 EntityUtils.consume(entity); 120 response.close(); 121 } 122 } catch (ParseException e) { 123 log.error("发送HTTP请求时出现异常:" + e); 124 e.printStackTrace(System.out); 125 } catch (IOException e) { 126 log.error("发送HTTP请求时出现异常:" + e); 127 e.printStackTrace(System.out); 128 } catch (Exception e) { 129 log.error("发送HTTP请求时出现异常:" + e); 130 e.printStackTrace(System.out); 131 } finally { 132 /* 133 * try { httpclient.close(); } catch (IOException e) { 134 * log.error("关闭HTTP连接时出现异常:" + e); } 135 */ 136 } 137 return null; 138 } 139 140 /** 141 * 发送 get请求 142 * 143 * @param url 144 * @param timeout 超时时间 145 * @param ignoreHttps 是否忽略https证书检查 146 * @return 147 */ 148 public static String get(String url, Map<String, String> params, Map<String, Object> headers, Integer timeout, 149 boolean ignoreHttps) { 150 CloseableHttpClient client = null; 151 if (ignoreHttps) { 152 client = getIgnoreHttpsClient(); 153 } else { 154 client = httpclient; 155 } 156 try { 157 HttpGet httpGet = null; 158 if (params != null && params.size() > 0) { 159 List<NameValuePair> qparams = new ArrayList<NameValuePair>(); 160 for (Entry<String, String> entry : params.entrySet()) { 161 qparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 162 } 163 String queryParams = URLEncodedUtils.format(qparams, "UTF-8"); 164 if (url.indexOf("?") != -1) { 165 url += "&" + queryParams; 166 } else { 167 url += "?" + queryParams; 168 } 169 170 } 171 httpGet = new HttpGet(url); 172 httpGet.setHeader("Content-type", "application/json;charset=UTF-8"); 173 if (headers != null && headers.size() > 0) { 174 for (Iterator<String> iter = headers.keySet().iterator(); iter.hasNext();) { 175 String key = iter.next(); 176 httpGet.setHeader(key, headers.get(key).toString()); 177 } 178 } 179 180 timeout = timeout != null ? timeout : default_timeout; 181 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 182 .build();// 设置请求和传输超时时间 183 httpGet.setConfig(requestConfig); 184 185 CloseableHttpResponse response = client.execute(httpGet); 186 HttpEntity entity = response.getEntity(); 187 try { 188 if (entity != null) 189 return EntityUtils.toString(entity); 190 } finally { 191 if (entity != null) 192 EntityUtils.consume(entity); 193 response.close(); 194 } 195 } catch (ParseException e) { 196 log.error("发送HTTP请求时出现异常:" + e); 197 e.printStackTrace(System.out); 198 } catch (IOException e) { 199 log.error("发送HTTP请求时出现异常:" + e); 200 e.printStackTrace(System.out); 201 } catch (Exception e) { 202 log.error("发送HTTP请求时出现异常:" + e); 203 e.printStackTrace(System.out); 204 } finally { 205 /* 206 * try { httpclient.close(); } catch (IOException e) { 207 * log.error("关闭HTTP连接时出现异常:" + e); } 208 */ 209 } 210 return null; 211 } 212 213 /** 214 * 发送 get请求 215 * 216 * @param url 217 * @param timeout 超时时间 218 * @param ignoreHttps 是否忽略https证书检查 219 * @return 220 */ 221 public static String get(String url, Map<String, String> params, Integer timeout, boolean ignoreHttps) { 222 CloseableHttpClient client = null; 223 if (ignoreHttps) { 224 client = getIgnoreHttpsClient(); 225 } else { 226 client = httpclient; 227 } 228 try { 229 HttpGet httpGet = null; 230 if (params == null) 231 httpGet = new HttpGet(url); 232 else { 233 List<NameValuePair> qparams = new ArrayList<NameValuePair>(); 234 for (Entry<String, String> entry : params.entrySet()) { 235 qparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 236 } 237 String queryParams = URLEncodedUtils.format(qparams, "UTF-8"); 238 if (url.indexOf("?") != -1) { 239 url += "&" + queryParams; 240 } else { 241 url += "?" + queryParams; 242 } 243 httpGet = new HttpGet(url); 244 } 245 timeout = timeout != null ? timeout : default_timeout; 246 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 247 .build();// 设置请求和传输超时时间 248 httpGet.setConfig(requestConfig); 249 250 CloseableHttpResponse response = client.execute(httpGet); 251 HttpEntity entity = response.getEntity(); 252 try { 253 if (entity != null) 254 return EntityUtils.toString(entity); 255 } finally { 256 if (entity != null) 257 EntityUtils.consume(entity); 258 response.close(); 259 } 260 } catch (ParseException e) { 261 log.error("发送HTTP请求时出现异常:" + e); 262 e.printStackTrace(System.out); 263 } catch (IOException e) { 264 log.error("发送HTTP请求时出现异常:" + e); 265 e.printStackTrace(System.out); 266 } catch (Exception e) { 267 log.error("发送HTTP请求时出现异常:" + e); 268 e.printStackTrace(System.out); 269 } finally { 270 /* 271 * try { httpclient.close(); } catch (IOException e) { 272 * log.error("关闭HTTP连接时出现异常:" + e); } 273 */ 274 } 275 return null; 276 } 277 278 /** 279 * 发送get请求 280 * 281 * @param url 282 * @param timeout 超时时间(毫秒) 283 * @return 284 */ 285 public static String get(String url, Map<String, String> params, Integer timeout) { 286 return get(url, params, timeout, false); 287 } 288 289 /** 290 * 发送get请求 291 * 292 * @param url 293 * @param timeout 超时时间(毫秒) 294 * @return 295 */ 296 public static String get(String url, Map<String, String> params, Map<String, Object> headers) { 297 return get(url, params, headers, null, false); 298 } 299 300 /** 301 * 发送 get请求 302 * 303 * @param url 304 * @param timeout 超时时间 305 * @param ignoreHttps 是否忽略https证书检查 306 * @return 307 */ 308 public static String get(String url, Integer timeout, boolean ignoreHttps) { 309 return get(url, null, timeout, ignoreHttps); 310 } 311 312 /** 313 * 获取忽略https证书的client 314 * 315 * @return 316 */ 317 public static CloseableHttpClient getIgnoreHttpsClient() { 318 SSLContext sslContext = null; 319 try { 320 sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { 321 public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 322 return true; 323 } 324 }).build(); 325 } catch (KeyManagementException e) { 326 e.printStackTrace(); 327 } catch (NoSuchAlgorithmException e) { 328 e.printStackTrace(); 329 } catch (KeyStoreException e) { 330 e.printStackTrace(); 331 } 332 333 return HttpClients.custom().setSslcontext(sslContext).setSSLHostnameVerifier(new NoopHostnameVerifier()) 334 .build(); 335 } 336 337 /** 338 * 发送 post请求 339 * 340 * @param url 341 * @param timeout 超时时间(毫秒) 342 * @param params 请求参数 343 * @return 344 */ 345 public static String post(String url, Map<String, String> params, Integer timeout) { 346 347 CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build(); 348 try { 349 350 HttpPost httpPost = new HttpPost(url); 351 if (params != null) { 352 List<NameValuePair> qparams = new ArrayList<NameValuePair>(); 353 for (Entry<String, String> entry : params.entrySet()) { 354 qparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 355 } 356 httpPost.setEntity(new UrlEncodedFormEntity(qparams, "UTF-8")); 357 } 358 timeout = timeout != null ? timeout : default_timeout; 359 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 360 .build();// 设置请求和传输超时时间 361 httpPost.setConfig(requestConfig); 362 363 CloseableHttpResponse response = httpclient.execute(httpPost); 364 HttpEntity entity = response.getEntity(); 365 try { 366 if (entity != null) { 367 StringBuilder sb = new StringBuilder(); 368 String line = null; 369 InputStream inputStream = entity.getContent(); 370 try { 371 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 372 while ((line = bufferedReader.readLine()) != null) { 373 sb.append(line); 374 } 375 } finally { 376 inputStream.close(); 377 } 378 return sb.toString(); 379 } 380 } finally { 381 response.close(); 382 } 383 384 /* 385 * try { if (entity != null) return EntityUtils.toString(entity); } finally { if 386 * (entity != null) EntityUtils.consume(entity); response.close(); } 387 */ 388 } catch (ParseException e) { 389 log.error("发送HTTP请求时出现异常:" + e); 390 e.printStackTrace(System.out); 391 } catch (IOException e) { 392 log.error("发送HTTP请求时出现异常:" + e); 393 e.printStackTrace(System.out); 394 } catch (Exception e) { 395 log.error("发送HTTP请求时出现异常:" + e); 396 e.printStackTrace(System.out); 397 } finally { 398 /* 399 * try { httpclient.close(); } catch (IOException e) { 400 * log.error("关闭HTTP连接时出现异常:" + e); } 401 */ 402 } 403 return null; 404 } 405 406 /** 407 * 发送 post请求 带请求头 408 * 409 * @param url 410 * @param params 411 * @param headers 412 * @param timeout 413 * @return 414 */ 415 public static String post(String url, Map<String, String> params, Map<String, String> headers, Integer timeout) { 416 417 CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build(); 418 try { 419 HttpPost httpPost = new HttpPost(url); 420 421 if (params != null) { 422 List<NameValuePair> qparams = new ArrayList<NameValuePair>(); 423 for (Entry<String, String> entry : params.entrySet()) { 424 qparams.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); 425 } 426 httpPost.setEntity(new UrlEncodedFormEntity(qparams, CHARSET)); 427 } 428 if (headers != null && headers.size() > 0) { 429 for (Iterator<String> iter = headers.keySet().iterator(); iter.hasNext();) { 430 String key = iter.next(); 431 httpPost.setHeader(key, headers.get(key)); 432 } 433 } 434 timeout = timeout != null ? timeout : default_timeout; 435 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 436 .build();// 设置请求和传输超时时间 437 httpPost.setConfig(requestConfig); 438 439 CloseableHttpResponse response = httpclient.execute(httpPost); 440 HttpEntity entity = response.getEntity(); 441 442 // 方法一: 443 try { 444 if (entity != null) { 445 StringBuilder sb = new StringBuilder(); 446 String line = null; 447 InputStream inputStream = entity.getContent(); 448 try { 449 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 450 while ((line = bufferedReader.readLine()) != null) { 451 sb.append(line); 452 } 453 } finally { 454 inputStream.close(); 455 } 456 return sb.toString(); 457 } 458 } finally { 459 response.close(); 460 } 461 462 // 方法二: 463 /* 464 * try { if (entity != null) return EntityUtils.toString(entity); } finally { if 465 * (entity != null) EntityUtils.consume(entity); response.close(); } 466 */ 467 } catch (ParseException e) { 468 log.error("发送HTTP请求时出现异常:" + e); 469 e.printStackTrace(System.out); 470 } catch (IOException e) { 471 log.error("发送HTTP请求时出现异常:" + e); 472 e.printStackTrace(System.out); 473 } catch (Exception e) { 474 log.error("发送HTTP请求时出现异常:" + e); 475 e.printStackTrace(System.out); 476 } finally { 477 /* 478 * try { httpclient.close(); } catch (IOException e) { 479 * log.error("关闭HTTP连接时出现异常:" + e); } 480 */ 481 } 482 return null; 483 } 484 485 /** 486 * post body 487 * 488 * @param url 489 * @param params 请求body内容 490 * @return 491 */ 492 public static String postBody(String url, String params, Map<String, String> headers, Integer timeout) { 493 494 CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build(); 495 try { 496 497 HttpPost httpPost = new HttpPost(url); 498 if (!StringUtils.isEmpty(params)) { 499 httpPost.setEntity(new StringEntity(params, "UTF-8")); 500 } 501 if (headers != null && headers.size() > 0) { 502 for (Iterator<String> iter = headers.keySet().iterator(); iter.hasNext();) { 503 String key = iter.next(); 504 httpPost.setHeader(key, headers.get(key)); 505 } 506 } 507 timeout = timeout != null ? timeout : default_timeout; 508 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 509 .build();// 设置请求和传输超时时间 510 httpPost.setConfig(requestConfig); 511 512 CloseableHttpResponse response = httpclient.execute(httpPost); 513 HttpEntity entity = response.getEntity(); 514 // 方法一: 515 try { 516 if (entity != null) { 517 StringBuilder sb = new StringBuilder(); 518 String line = null; 519 InputStream inputStream = entity.getContent(); 520 try { 521 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 522 while ((line = bufferedReader.readLine()) != null) { 523 sb.append(line); 524 } 525 } finally { 526 inputStream.close(); 527 } 528 return sb.toString(); 529 } 530 } finally { 531 response.close(); 532 } 533 // 方法二: 534 /* 535 * try { if (entity != null) return EntityUtils.toString(entity); } finally { if 536 * (entity != null) EntityUtils.consume(entity); response.close(); } 537 */ 538 } catch (ParseException e) { 539 log.error("发送HTTP请求时出现异常:" + e); 540 e.printStackTrace(System.out); 541 } catch (IOException e) { 542 log.error("发送HTTP请求时出现异常:" + e); 543 e.printStackTrace(System.out); 544 } catch (Exception e) { 545 log.error("发送HTTP请求时出现异常:" + e); 546 e.printStackTrace(System.out); 547 } finally { 548 } 549 return null; 550 } 551 552 public static String postBodyJson(String url, String params, Map<String, String> headers, Integer timeout) { 553 554 CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build(); 555 try { 556 557 HttpPost httpPost = new HttpPost(url); 558 httpPost.setHeader("Content-type", "application/json;charset=UTF-8"); 559 if (!StringUtils.isEmpty(params)) { 560 httpPost.setEntity(new StringEntity(params, "UTF-8")); 561 } 562 if (headers != null && headers.size() > 0) { 563 for (Iterator<String> iter = headers.keySet().iterator(); iter.hasNext();) { 564 String key = iter.next(); 565 httpPost.setHeader(key, headers.get(key)); 566 } 567 } 568 timeout = timeout != null ? timeout : default_timeout; 569 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 570 .build();// 设置请求和传输超时时间 571 httpPost.setConfig(requestConfig); 572 573 CloseableHttpResponse response = httpclient.execute(httpPost); 574 HttpEntity entity = response.getEntity(); 575 // 方法一: 576 try { 577 if (entity != null) { 578 StringBuilder sb = new StringBuilder(); 579 String line = null; 580 InputStream inputStream = entity.getContent(); 581 try { 582 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 583 while ((line = bufferedReader.readLine()) != null) { 584 sb.append(line); 585 } 586 } finally { 587 inputStream.close(); 588 } 589 return sb.toString(); 590 } 591 } finally { 592 response.close(); 593 } 594 // 方法二: 595 /* 596 * try { if (entity != null) return EntityUtils.toString(entity); } finally { if 597 * (entity != null) EntityUtils.consume(entity); response.close(); } 598 */ 599 } catch (ParseException e) { 600 log.error("发送HTTP请求时出现异常:" + e); 601 e.printStackTrace(System.out); 602 } catch (IOException e) { 603 log.error("发送HTTP请求时出现异常:" + e); 604 e.printStackTrace(System.out); 605 } catch (Exception e) { 606 log.error("发送HTTP请求时出现异常:" + e); 607 e.printStackTrace(System.out); 608 } finally { 609 } 610 return null; 611 } 612 613 public static String putBodyJson(String url, String params, Map<String, String> headers, Integer timeout) { 614 615 CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(cm).build(); 616 try { 617 618 HttpPut httpPost = new HttpPut(url); 619 httpPost.setHeader("Content-type", "application/json;charset=UTF-8"); 620 if (!StringUtils.isEmpty(params)) { 621 httpPost.setEntity(new StringEntity(params, "UTF-8")); 622 } 623 if (headers != null && headers.size() > 0) { 624 for (Iterator<String> iter = headers.keySet().iterator(); iter.hasNext();) { 625 String key = iter.next(); 626 httpPost.setHeader(key, headers.get(key)); 627 } 628 } 629 timeout = timeout != null ? timeout : default_timeout; 630 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout) 631 .build();// 设置请求和传输超时时间 632 httpPost.setConfig(requestConfig); 633 634 CloseableHttpResponse response = httpclient.execute(httpPost); 635 HttpEntity entity = response.getEntity(); 636 // 方法一: 637 try { 638 if (entity != null) { 639 StringBuilder sb = new StringBuilder(); 640 String line = null; 641 InputStream inputStream = entity.getContent(); 642 try { 643 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); 644 while ((line = bufferedReader.readLine()) != null) { 645 sb.append(line); 646 } 647 } finally { 648 inputStream.close(); 649 } 650 return sb.toString(); 651 } 652 } finally { 653 response.close(); 654 } 655 // 方法二: 656 /* 657 * try { if (entity != null) return EntityUtils.toString(entity); } finally { if 658 * (entity != null) EntityUtils.consume(entity); response.close(); } 659 */ 660 } catch (ParseException e) { 661 log.error("发送HTTP请求时出现异常:" + e); 662 e.printStackTrace(System.out); 663 } catch (IOException e) { 664 log.error("发送HTTP请求时出现异常:" + e); 665 e.printStackTrace(System.out); 666 } catch (Exception e) { 667 log.error("发送HTTP请求时出现异常:" + e); 668 e.printStackTrace(System.out); 669 } finally { 670 } 671 return null; 672 } 673 }