导入依赖

 		<dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.9.0</version>
 		</dependency>
 
 		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
            <version>2.6.2</version>
 		</dependency>
 
  		<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.7</version>
 		</dependency>


2、使用okhttp 发送 get post 文件请求

import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import okhttp3.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.util.CollectionUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @author: qd
 * @create: 2024-04-21 15:21:25
 */
public class OkHttpUtil {
    private static volatile OkHttpClient    okHttpClient = null;
    private static volatile Semaphore       semaphore    = null;
    private                 Request.Builder request;
    private static final    Logger          logger       = LogManager.getLogger(OkHttpUtil.class);

    /**
     * init okHttp client
     */
    private OkHttpUtil() {
        this(15000l, 20000l, 20000l);
    }

    private OkHttpUtil(Long connectTimeOut, Long writeTimeOut, Long readTimeOut) {
        if (okHttpClient == null) {
            synchronized (OkHttpUtil.class) {
                if (okHttpClient == null) {
                    okHttpClient = new OkHttpClient.Builder()
                            .connectTimeout(connectTimeOut, TimeUnit.MILLISECONDS)
                            .writeTimeout(writeTimeOut, TimeUnit.MILLISECONDS)
                            .readTimeout(readTimeOut, TimeUnit.MILLISECONDS)
                            .hostnameVerifier((hostName, session) -> true)
                            .retryOnConnectionFailure(true).connectionPool(new ConnectionPool(20, 10, TimeUnit.SECONDS))
                            .build();
                }
            }
        }
    }

    /**
     * create okhttputils
     *
     * @return
     */
    public static OkHttpUtil builder() {
        return new OkHttpUtil();
    }

    /**
     * create okhttputils
     *
     * @return
     */
    public static OkHttpUtil builder(Long connectTimeOut, Long writeTimeOut, Long readTimeOut) {
        return new OkHttpUtil(connectTimeOut, writeTimeOut, readTimeOut);
    }


    /**
     * 发送get请求
     * @param url url地址
     * @param paramMap 参数
     * @param headers 请求头部
     * @return
     * @throws IOException
     */
    public String get(String url,Map<String, Object> paramMap,Map<String, String> headers)throws IOException{
        StringBuffer retStr = new StringBuffer("");
        if (paramMap != null) {
            paramMap.forEach((key, value) -> {
                retStr.append(key + "=").append(value + "&");
            });
            url = url +"?" + retStr;
        }

        request = new Request.Builder().get().url(url);
        for (Map.Entry<String, String> entry : headers.entrySet()) {
            request.addHeader(entry.getKey(), entry.getValue());
        }
        Response response = okHttpClient.newCall(request.build()).execute();
        try (ResponseBody responseBody = response.body()) {
            if (response.isSuccessful()) {
                return responseBody.string();
            }
        } catch (Exception e) {
            logger.error("OkHttpUtil post error,error:{}.{}.{}", e.getStackTrace(), url, paramMap);
        }
        return "";
    }

    /**
     * form post
     *
     * @param url      http url
     * @param paramMap param map
     * @param headers  headers
     * @return response body
     * @throws IOException
     */
    public String post(String url, Map<String, Object> paramMap, Map<String, String> headers) throws IOException {
        RequestBody requestBody;
        FormBody.Builder formBody = new FormBody.Builder();
        if (paramMap != null) {
            paramMap.forEach((key, value) -> {
                formBody.add(key, (String) value);
            });
        }

        requestBody = formBody.build();
        request = new Request.Builder().post(requestBody).url(url);
        for (Map.Entry<String, String> entry : headers.entrySet()) {
            request.addHeader(entry.getKey(), entry.getValue());
        }
        Response response = okHttpClient.newCall(request.build()).execute();
        try (ResponseBody responseBody = response.body()) {
            if (response.isSuccessful()) {
                return responseBody.string();
            }
        } catch (Exception e) {
            logger.error("OkHttpUtil post error,error:{}.{}.{}", e.getStackTrace(), url, paramMap);
        }
        return "";
    }

    /**
     * json post
     *
     * @param url      http url
     * @param paramMap param map
     * @param headers  headers
     * @return response body
     * @throws IOException
     */
    public String postJson(String url, String paramMap, Map<String, String> headers) {
        RequestBody requestBody;
        String json = "";
        if (paramMap != null) {
            json = JSONUtil.toJsonStr(paramMap);
        }
        requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json);
        request = new Request.Builder().post(requestBody).url(url);
        if(headers!=null) {
            for (Map.Entry<String, String> entry : headers.entrySet()) {
                request.addHeader(entry.getKey(), entry.getValue());
            }
        }
        Response response = null;
        try {
            response = okHttpClient.newCall(request.build()).execute();
        } catch (Exception e) {
            logger.error("OkHttpUtil post error,error:{}.{}.{}", e.getStackTrace(), url, paramMap);
        }

        if (response != null) {
            try (ResponseBody responseBody = response.body()) {
                if (response.isSuccessful()) {
                    return responseBody.string();
                }
            } catch (Exception e) {
                logger.error("OkHttpUtil get body error,error:{}.{}.{}", e.getStackTrace(), url, paramMap);
            }
        }
        return "";
    }


    /**
     * 发送文件请求  MultipartFile方式
     * @param url  地址
     * @param paramMap 参数
     * @param headers  请求头部
     * @param files  MultipartFile文件
     * @return
     */
    public String postJsonAndFile(String url, Map<String, String> paramMap, Map<String, String> headers, MultipartFile[] files) {
        okhttp3.MultipartBody.Builder requestBuilder = new okhttp3.MultipartBody.Builder();
        if (!ObjectUtil.isEmpty(files)) {
            try {
                MultipartFile[] var6 = files;
                int var7 = files.length;

                for(int var8 = 0; var8 < var7; ++var8) {
                    MultipartFile file = var6[var8];
                    requestBuilder.addFormDataPart("attachments", file.getOriginalFilename(), RequestBody.create(MediaType.parse("application/octet-stream"), file.getBytes()));
                }
            } catch (Exception var26) {
                logger.error("OkHttpUtil add file,error:{}.{}", var26.getStackTrace() , url);
            }
        }

        if (!MapUtil.isEmpty(paramMap)) {
            requestBuilder.addFormDataPart("params", JSONUtil.toJsonStr(paramMap));
        }

        requestBuilder.setType(MediaType.parse("multipart/form-data"));
        this.request = (new Request.Builder()).post(requestBuilder.build()).url(url);
        if (!CollectionUtils.isEmpty(headers)) {
            Iterator var27 = headers.entrySet().iterator();

            while(var27.hasNext()) {
                Map.Entry<String, String> entry = (Map.Entry)var27.next();
                this.request.addHeader((String)entry.getKey(), (String)entry.getValue());
            }
        }

        Response response = null;

        try {
            response = okHttpClient.newCall(this.request.build()).execute();
        } catch (Exception var22) {
            logger.error("OkHttpUtil post execute,error:{}.{}.{}", var22.getStackTrace(), url, paramMap);
        }

        if (response != null) {
            try {
                ResponseBody responseBody = response.body();
                Throwable var31 = null;

                String var32;
                try {
                    if (null == responseBody || !response.isSuccessful()) {
                        return "";
                    }

                    var32 = responseBody.string();
                } catch (Throwable var23) {
                    var31 = var23;
                    throw var23;
                } finally {
                    if (responseBody != null) {
                        if (var31 != null) {
                            try {
                                responseBody.close();
                            } catch (Throwable var21) {
                                var31.addSuppressed(var21);
                            }
                        } else {
                            responseBody.close();
                        }
                    }

                }
                return var32;
            } catch (Exception var25) {
                logger.error("OkHttpUtil get body error,error:{}.{}.{}", var25.getStackTrace(), url,  paramMap);
            }
        }

        return "";
    }


    /**
     * 发送文件请求  File方式
     * @param url  地址
     * @param paramMap 参数
     * @param headers  请求头部
     * @param files  File
     * @return
     */
    public String postJsonAndFile(String url, Map<String, String> paramMap, Map<String, String> headers, File[] files) {
        okhttp3.MultipartBody.Builder requestBuilder = new okhttp3.MultipartBody.Builder();
        if (!ObjectUtil.isEmpty(files)) {
            try {
                File[] var6 = files;
                int var7 = files.length;

                for(int var8 = 0; var8 < var7; ++var8) {
                    File file = var6[var8];
                    requestBuilder.addFormDataPart("attachments", file.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), file));
                }
            } catch (Exception var26) {
                logger.error("OkHttpUtil add file,error:{}.{}", var26.getStackTrace(), url);
            }
        }

        if (!MapUtil.isEmpty(paramMap)) {
            requestBuilder.addFormDataPart("params", JSONUtil.toJsonStr(paramMap));
        }

        requestBuilder.setType(MediaType.parse("multipart/form-data"));
        this.request = (new Request.Builder()).post(requestBuilder.build()).url(url);
        if (!CollectionUtils.isEmpty(headers)) {
            Iterator var27 = headers.entrySet().iterator();

            while(var27.hasNext()) {
                Map.Entry<String, String> entry = (Map.Entry)var27.next();
                this.request.addHeader((String)entry.getKey(), (String)entry.getValue());
            }
        }

        Response response = null;

        try {
            response = okHttpClient.newCall(this.request.build()).execute();
        } catch (Exception var22) {
            logger.error("OkHttpUtil post execute,error:{}.{}.{}", var22.getStackTrace(), url, paramMap);
        }

        if (response != null) {
            try {
                ResponseBody responseBody = response.body();
                Throwable var31 = null;

                String var32;
                try {
                    if (null == responseBody || !response.isSuccessful()) {
                        return "";
                    }

                    var32 = responseBody.string();
                } catch (Throwable var23) {
                    var31 = var23;
                    throw var23;
                } finally {
                    if (responseBody != null) {
                        if (var31 != null) {
                            try {
                                responseBody.close();
                            } catch (Throwable var21) {
                                var31.addSuppressed(var21);
                            }
                        } else {
                            responseBody.close();
                        }
                    }
                }
                return var32;
            } catch (Exception var25) {
                logger.error("OkHttpUtil get body error,error:{}.{}.{}", var25.getStackTrace(), url,  paramMap);
            }
        }
        return "";
    }
}

更多推荐