OKhttp4 工具类

以下是okhttp4工具类,版本如下

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
			<version>4.11.0</version>
		</dependency>
package com.zh.yelan.util;

import cn.hutool.core.date.StopWatch;
import cn.hutool.core.util.ObjUtil;
import lombok.extern.slf4j.Slf4j;
import okhttp3.*;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @ClassName OkHttpUtils
 * @Description
 * @Author hao.zhou
 * @Date 2023/9/13 14:12
 * @Version 1.0
 **/
@Slf4j
public class OkHttpUtils {

    private static OkHttpClient okHttpClient;

    private Long readTimeout = 1500L;
    private Long writeTimeout = 1500L;
    private Long callTimeout = 15000L;

    private int maxIdleConnections = 200;
    private Long keepAliveDuration = 5L;

    //渠道timeout
    public OkHttpUtils(Long inReadTimeout) {
        if (null == inReadTimeout) {
            inReadTimeout = readTimeout;
        }
        if (okHttpClient == null || okHttpClient.readTimeoutMillis() != inReadTimeout) {
            synchronized (OkHttpClient.class) {
                if (okHttpClient == null || okHttpClient.readTimeoutMillis() != inReadTimeout) {
                    TrustManager[] trustManagers = buildTrustManagers();
                    okHttpClient = new OkHttpClient.Builder()
                            .sslSocketFactory(sslSocketFactory(trustManagers), (X509TrustManager) trustManagers[0])
                            .hostnameVerifier((hostName, session) -> true)  //主机名跳过验证
                            .connectionPool(pool())
                            .callTimeout(callTimeout, TimeUnit.MILLISECONDS) // 调用时间
                            .pingInterval(5, TimeUnit.SECONDS) // 连通性测试间隔
                            .readTimeout(inReadTimeout, TimeUnit.MILLISECONDS) // 读时间
                            .writeTimeout(writeTimeout, TimeUnit.SECONDS) // 写时间
                            .build();
                }
            }
        }
    }



    /**
     * @param url        请求的url
     * @param queries    请求的参数,在浏览器?后面的数据,没有可以传null
     * @return
     */
    public String get(String url, Map<String, String> queries) {
        long startTime = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder(url);
        if (queries != null && queries.keySet().size() > 0) {
            boolean firstFlag = true;
            for (Map.Entry<String, String> entry : queries.entrySet()) {
                if (firstFlag) {
                    sb.append("?").append(entry.getKey()).append("=").append(entry.getValue());
                    firstFlag = false;
                } else {
                    sb.append("&").append(entry.getKey()).append("=").append(entry.getValue());
                }
            }
        }
        Request request = new Request.Builder()
                .url(sb.toString())
                .build();
        try (Response response = okHttpClient.newCall(request).execute()) {
            int status = response.code();
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                return response.body().string();
            }
        } catch (Exception e) {
            log.error("okhttp4 failed, put error >> ex = {}", e.getMessage());
        }
        return null;
    }

    public String get(String url, String orderId) {
        long startTime = System.currentTimeMillis();
        try {
            Request request = new Request.Builder().url(url).build();
            Response response = okHttpClient.newCall(request).execute();
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                return response.body().string();
            } else {
                int code = response.code();
                return null;
            }
        } catch (IllegalStateException e) {
            log.info("request url : {}, orderId : {}, exception:{}", url, orderId, e.getMessage());
            e.printStackTrace();
        } catch (Exception e) {
            log.info("request url : {}, orderId : {}, exception:{}", url, orderId, e.getMessage());
        }
        return null;
    }



    public String post(String url, Map<String, String> params) {
        long startTime = System.currentTimeMillis();
        FormBody.Builder builder = new FormBody.Builder();
        //添加参数
        if (params != null && params.keySet().size() > 0) {
            for (String key : params.keySet()) {
                builder.add(key, params.get(key));
            }
        }
        Request request = new Request.Builder()
                .url(url)
                .post(builder.build())
                .build();
        try (Response response = okHttpClient.newCall(request).execute()) {
            long end = System.currentTimeMillis() - startTime;
            int status = response.code();
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                return response.body().string();
            }
        } catch (Exception e) {
            log.error("okhttp4 post error >> ex = {}", e.getMessage());
        }
        return null;
    }

    /**
     * get
     *
     * @param url     请求的url
     * @param queries 请求的参数,在浏览器?后面的数据,没有可以传null
     * @return
     */
    public String getForHeader(String url, Map<String, String> queries) {
        StringBuilder sb = new StringBuilder(url);
        if (queries != null && queries.keySet().size() > 0) {
            boolean firstFlag = true;
            for (Map.Entry<String, String> entry : queries.entrySet()) {
                if (firstFlag) {
                    sb.append("?").append(entry.getKey()).append("=").append(entry.getValue());
                    firstFlag = false;
                } else {
                    sb.append("&").append(entry.getKey()).append("=").append(entry.getValue());
                }
            }
        }
        Request request = new Request.Builder()
                .addHeader("key", "value")
                .url(sb.toString())
                .build();
        try (Response response = okHttpClient.newCall(request).execute()) {
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                return response.body().string();
            }
        } catch (Exception e) {
            log.error("okhttp4 put error >> ex = {}", e.getMessage());
        }
        return null;
    }

    /**
     * Post请求发送JSON数据....{"name":"zhangsan","pwd":"123456"}
     * 参数一:请求Url
     * 参数二:请求的JSON
     * 参数三:请求回调
     */
    public String postJsonParams(String url, String jsonParams) {
        StopWatch stopWatch = new StopWatch();
        String responseBody = "";
        RequestBody requestBody = RequestBody.create(jsonParams, MediaType.parse("application/json; charset=utf-8"));
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        stopWatch.start();
        try (Response response = okHttpClient.newCall(request).execute()) {
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                return response.body().string();
            }
        } catch (Exception e) {
            log.error("okhttp4 post error >> ex = {}", e.getMessage());
        } finally {
            if(stopWatch.isRunning()){
                stopWatch.stop();
                log.info("调用耗时:{}", stopWatch.getTotalTimeMillis());
            }
        }
        return responseBody;
    }

    /**
     * Post请求发送JSON数据....{"name":"zhangsan","pwd":"123456"}
     * 参数一:请求Url
     * 参数二:请求的JSON
     * 参数三:请求回调
     */
    public String postJsonParams(String url, String jsonParams, String contentType) {
        long startTime = System.currentTimeMillis();
        String responseBody = "";
        RequestBody requestBody = RequestBody.create(jsonParams, MediaType.parse(contentType));
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        try (Response response = okHttpClient.newCall(request).execute()) {
            long end = System.currentTimeMillis() - startTime;
            int status = response.code();
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                responseBody = response.body().string();
            } else {

            }
        } catch (Exception e) {
            log.error("okhttp4 post error >> ex = {}", e.getMessage());
        }
        return responseBody;
    }

    /**
     * Post请求发送xml数据....
     * 参数一:请求Url
     * 参数二:请求的xmlString
     * 参数三:请求回调
     */
    public String postXmlParams(String url, String xml) {
        String responseBody = "";
        RequestBody requestBody = RequestBody.create(xml, MediaType.parse("application/xml; charset=utf-8"));
        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        try (Response response = okHttpClient.newCall(request).execute()) {
            if (ObjUtil.isNotNull(response) && response.isSuccessful()) {
                return response.body().string();
            }
        } catch (Exception e) {
            log.error("okhttp4 post error >> ex = {}", e.getMessage());
        }
        return responseBody;
    }

    private TrustManager[] buildTrustManagers() {
        return new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) {
                    }

                    @Override
                    public void checkServerTrusted(X509Certificate[] chain, String authType) {
                    }

                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[]{};
                    }
                }
        };
    }


    public SSLSocketFactory sslSocketFactory(TrustManager[] trustAllCerts) {
        SSLSocketFactory ssfFactory = null;
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new SecureRandom());
            ssfFactory = sc.getSocketFactory();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ssfFactory;
    }

    /**
     * Create a new connection pool with tuning parameters appropriate for a single-user application.
     * The tuning parameters in this pool are subject to change in future OkHttp releases. Currently
     */
    public ConnectionPool pool() {
        return new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.MINUTES);
    }

}

测试

public static void main(String[] args) {
        OkHttpUtils okHttpUtils = new OkHttpUtils(null);
        String s = okHttpUtils.postJsonParams("http://172.16.86.140:8007/mobileVerificationCode", "{\"mobile\":\"182*******\"}");
        System.out.println(s);
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值