123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- package com.kmall.admin.utils.haikong;
- import com.kmall.admin.utils.jackson.JacksonUtil;
- import okhttp3.MediaType;
- import okhttp3.OkHttpClient;
- import okhttp3.Request;
- import org.apache.commons.lang3.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.util.CollectionUtils;
- import javax.net.ssl.*;
- import java.io.IOException;
- import java.security.KeyManagementException;
- import java.security.NoSuchAlgorithmException;
- import java.security.SecureRandom;
- import java.security.cert.CertificateException;
- import java.security.cert.X509Certificate;
- import java.util.Map;
- import java.util.Objects;
- import java.util.Set;
- import java.util.concurrent.TimeUnit;
- import java.util.concurrent.atomic.AtomicInteger;
- /**
- * @author
- * @createDate 2021-10-27
- */
- public class OkHttpUtils {
- private static final Logger logger = LoggerFactory.getLogger(OkHttpUtils.class);
- public static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");
- public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
- public static final int CONNEC_TIME = 20;
- public static final int READ_TIME = 30;
- public static final int WRITE_TIME = 30;
- private static OkHttpClient okHttpClientSSL = null;
- static {
- okHttpClientSSL = new OkHttpClient.Builder()
- .sslSocketFactory(createSSLSocketFactory())
- .hostnameVerifier(new TrustAllHostnameVerifier())
- .connectTimeout(CONNEC_TIME, TimeUnit.SECONDS)
- .readTimeout(READ_TIME, TimeUnit.SECONDS)
- .writeTimeout(WRITE_TIME, TimeUnit.SECONDS)
- .build();
- }
- /**
- * 请求重试
- * @param request 请求
- * @param retry 重试次数
- */
- public static String retry(Request request, int retry) {
- AtomicInteger count = new AtomicInteger(1);
- while (count.get() <= retry) {
- try {
- String response = okHttpClientSSL.newCall(request).execute().body().string();
- count.set(99);
- return response;
- } catch (IOException e) {
- logger.error("调用接口失败!重试中......\n==========================================================\n url:{} \n header:{} \n body:{} \n retry:{}" +
- "\n=========================================================="
- , request.url().toString()
- , JacksonUtil.toJson(request.headers())
- , JacksonUtil.toJson(Objects.isNull(request.body()) ? "" : request.body().contentType())
- , count.get()
- );
- count.incrementAndGet();
- }
- }
- return StringUtils.EMPTY;
- }
- /**
- * 批量设置
- * @param headers 请求头信息
- * @return Builder
- */
- public static Request.Builder addHeaders(Map<String, String> headers) {
- Request.Builder builder = new Request.Builder();
- if (CollectionUtils.isEmpty(headers)) {
- logger.warn("请求头数据为空!返回无请求头的Builder!");
- return builder;
- }
- Set<Map.Entry<String, String>> entries = headers.entrySet();
- for (Map.Entry<String, String> entry : entries) {
- builder.addHeader(entry.getKey(), entry.getValue());
- }
- return builder;
- }
- public static void main(String[] args) {
- Request request = new Request.Builder().url("https://www.baidu.com").get().build();
- String retry = retry(request, 3);
- System.out.println(retry);
- }
- /**
- * 证书管理
- */
- private static TrustManager[] getTrustManager() {
- return new TrustManager[] {
- new X509TrustManager() {
- @Override
- public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
- }
- @Override
- public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
- }
- @Override
- public X509Certificate[] getAcceptedIssuers() {
- return new X509Certificate[0];
- }
- }
- };
- }
- private static SSLSocketFactory createSSLSocketFactory() {
- SSLSocketFactory sslSocketFactory = null;
- try {
- SSLContext sslContext = SSLContext.getInstance("TLS");
- sslContext.init(null, getTrustManager(), new SecureRandom());
- sslSocketFactory = sslContext.getSocketFactory();
- } catch (NoSuchAlgorithmException | KeyManagementException e) {
- logger.error("SSL初始化失败!", e);
- throw new RuntimeException(e);
- }
- return sslSocketFactory;
- }
- /**
- * 忽略验证
- */
- private static class TrustAllHostnameVerifier implements HostnameVerifier {
- @Override
- public boolean verify(String s, SSLSession sslSession) {
- return true;
- }
- }
- }
|