OkHttpUtils.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.kmall.admin.utils.haikong;
  2. import com.kmall.admin.utils.jackson.JacksonUtil;
  3. import okhttp3.MediaType;
  4. import okhttp3.OkHttpClient;
  5. import okhttp3.Request;
  6. import org.apache.commons.lang3.StringUtils;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.util.CollectionUtils;
  10. import javax.net.ssl.*;
  11. import java.io.IOException;
  12. import java.security.KeyManagementException;
  13. import java.security.NoSuchAlgorithmException;
  14. import java.security.SecureRandom;
  15. import java.security.cert.CertificateException;
  16. import java.security.cert.X509Certificate;
  17. import java.util.Map;
  18. import java.util.Objects;
  19. import java.util.Set;
  20. import java.util.concurrent.TimeUnit;
  21. import java.util.concurrent.atomic.AtomicInteger;
  22. /**
  23. * @author
  24. * @createDate 2021-10-27
  25. */
  26. public class OkHttpUtils {
  27. private static final Logger logger = LoggerFactory.getLogger(OkHttpUtils.class);
  28. public static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");
  29. public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
  30. public static final int CONNEC_TIME = 20;
  31. public static final int READ_TIME = 30;
  32. public static final int WRITE_TIME = 30;
  33. private static OkHttpClient okHttpClientSSL = null;
  34. static {
  35. okHttpClientSSL = new OkHttpClient.Builder()
  36. .sslSocketFactory(createSSLSocketFactory())
  37. .hostnameVerifier(new TrustAllHostnameVerifier())
  38. .connectTimeout(CONNEC_TIME, TimeUnit.SECONDS)
  39. .readTimeout(READ_TIME, TimeUnit.SECONDS)
  40. .writeTimeout(WRITE_TIME, TimeUnit.SECONDS)
  41. .build();
  42. }
  43. /**
  44. * 请求重试
  45. * @param request 请求
  46. * @param retry 重试次数
  47. */
  48. public static String retry(Request request, int retry) {
  49. AtomicInteger count = new AtomicInteger(1);
  50. while (count.get() <= retry) {
  51. try {
  52. String response = okHttpClientSSL.newCall(request).execute().body().string();
  53. count.set(99);
  54. return response;
  55. } catch (IOException e) {
  56. logger.error("调用接口失败!重试中......\n==========================================================\n url:{} \n header:{} \n body:{} \n retry:{}" +
  57. "\n=========================================================="
  58. , request.url().toString()
  59. , JacksonUtil.toJson(request.headers())
  60. , JacksonUtil.toJson(Objects.isNull(request.body()) ? "" : request.body().contentType())
  61. , count.get()
  62. );
  63. count.incrementAndGet();
  64. }
  65. }
  66. return StringUtils.EMPTY;
  67. }
  68. /**
  69. * 批量设置
  70. * @param headers 请求头信息
  71. * @return Builder
  72. */
  73. public static Request.Builder addHeaders(Map<String, String> headers) {
  74. Request.Builder builder = new Request.Builder();
  75. if (CollectionUtils.isEmpty(headers)) {
  76. logger.warn("请求头数据为空!返回无请求头的Builder!");
  77. return builder;
  78. }
  79. Set<Map.Entry<String, String>> entries = headers.entrySet();
  80. for (Map.Entry<String, String> entry : entries) {
  81. builder.addHeader(entry.getKey(), entry.getValue());
  82. }
  83. return builder;
  84. }
  85. public static void main(String[] args) {
  86. Request request = new Request.Builder().url("https://www.baidu.com").get().build();
  87. String retry = retry(request, 3);
  88. System.out.println(retry);
  89. }
  90. /**
  91. * 证书管理
  92. */
  93. private static TrustManager[] getTrustManager() {
  94. return new TrustManager[] {
  95. new X509TrustManager() {
  96. @Override
  97. public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
  98. }
  99. @Override
  100. public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
  101. }
  102. @Override
  103. public X509Certificate[] getAcceptedIssuers() {
  104. return new X509Certificate[0];
  105. }
  106. }
  107. };
  108. }
  109. private static SSLSocketFactory createSSLSocketFactory() {
  110. SSLSocketFactory sslSocketFactory = null;
  111. try {
  112. SSLContext sslContext = SSLContext.getInstance("TLS");
  113. sslContext.init(null, getTrustManager(), new SecureRandom());
  114. sslSocketFactory = sslContext.getSocketFactory();
  115. } catch (NoSuchAlgorithmException | KeyManagementException e) {
  116. logger.error("SSL初始化失败!", e);
  117. throw new RuntimeException(e);
  118. }
  119. return sslSocketFactory;
  120. }
  121. /**
  122. * 忽略验证
  123. */
  124. private static class TrustAllHostnameVerifier implements HostnameVerifier {
  125. @Override
  126. public boolean verify(String s, SSLSession sslSession) {
  127. return true;
  128. }
  129. }
  130. }