OkHttpUtils工具类,复制粘贴即可使用

import com.pflm.mall.ext.service.config.SkipSSLSocketClient;

import okhttp3.*;

import org.apache.commons.codec.binary.Base64;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.util.Map;

import java.util.concurrent.TimeUnit;

public class OkHttpUtils {

static ConnectionPool pool = new ConnectionPool(200, 5, TimeUnit.MINUTES);

private static final OkHttpClient client =
        new OkHttpClient.Builder()
                .connectionPool(pool)
                // 设置连接超时时间
                .connectTimeout(60, TimeUnit.SECONDS)
                // 从连接成功到响应的总时间
                .readTimeout(120, TimeUnit.SECONDS)
                // 写入超时时间
                .writeTimeout(120, TimeUnit.SECONDS)
                // 忽略ssl
                .sslSocketFactory(SkipSSLSocketClient.getSSLSocketFactory(), SkipSSLSocketClient.X509)
                .hostnameVerifier(SkipSSLSocketClient.getHostnameVerifier())
                .retryOnConnectionFailure(true)
                .build();


public static final MediaType MEDIA_TYPE_JSON = MediaType.get("application/json; charset=utf-8");


/**
 * 发起Get请求
 *
 * @param url    url
 * @param params 参数
 * @return 响应结果
 */
public static String doGet(String url, Map<String, Object> params) {
    Call call = createGetCall(url, params);
    return execute(call);
}

/**
 * 发起Get请求,返回请求流,用于文件下载
 *
 * @param url    url
 * @param params 参数
 * @return 响应结果
 */
public static InputStream doGetFileStream(String url, Map<String, Object> params) {
    Call call = createGetCall(url, params);
    return executeAndReturnStream(call);
}

/**
 * 发起 Post请求, 使用form表单参数
 *
 * @param url    url
 * @param params 参数
 * @return 响应结果
 */
public static String doPost(String url, Map<String, Object> params) {
    Call call = createPostCall(url, params);
    return execute(call);
}

/**
 * 发起 post请求, 使用json参数
 *
 * @param url  url
 * @param json json参数
 * @return resp
 */
public static String doPost(String url, String json) {
    Call call = createPostJsonCall(url, json);
    return execute(call);
}


/**
 * [异步] 发起Get请求
 *
 * @param url      url
 * @param params   参数
 * @param callback 回调方法
 */
public static void doGetAsync(String url, Map<String, Object> params, Callback callback) {
    Call call = createGetCall(url, params);
    call.enqueue(callback);
}

/**
 * [异步] 发起 Post请求
 *
 * @param url    url
 * @param params 参数
 */
public static void doPostAsync(String url, Map<String, Object> params, Callback callback) {
    Call call = createPostCall(url, params);
    call.enqueue(callback);
}

/**
 * [异步] 发起 post请求, 使用json参数
 *
 * @param url  url
 * @param json json参数
 */
public static void doPostAsync(String url, String json, Callback callback) {
    Call call = createPostJsonCall(url, json);
    call.enqueue(callback);
}


/**
 * Get请求, 构造 Call对象
 *
 * @param url    请求url
 * @param params 请求参数
 * @return Call
 */
private static Call createGetCall(String url, Map<String, Object> params) {

    Request.Builder builder = new Request.Builder();
    Request request = builder.url(url).build();
    // 设置参数
    HttpUrl httpUrl = createHttpUrl(request, params);
    builder.url(httpUrl).build();

    return client.newCall(builder.build());
}

/**
 * Post请求, 构造 Call对象
 *
 * @param url    请求url
 * @param params 请求参数
 * @return Call
 */
private static Call createPostCall(String url, Map<String, Object> params) {
    Request request = new Request.Builder()
            .post(createFormBody(params))
            .url(url)
            .build();
    return client.newCall(request);
}

/**
 * Post请求, 构造 Call对象
 *
 * @param url  请求url
 * @param json 请求参数
 * @return Call
 */
private static Call createPostJsonCall(String url, String json) {
    Request request = new Request.Builder()
            .post(RequestBody.create(MEDIA_TYPE_JSON, json))
            .url(url)
            .build();
    return client.newCall(request);
}


/**
 * 为 get请求设置参数
 *
 * @param request request对象
 * @param params 请求参数
 * @return 设置了参数的 HttpUrl对象
 */
private static HttpUrl createHttpUrl(Request request, Map<String, Object> params) {
    HttpUrl.Builder urlBuilder = request.url().newBuilder();
    if (params != null && params.size() > 0) {
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            urlBuilder.addQueryParameter(entry.getKey(), String.valueOf(entry.getValue()));
        }
    }
    return urlBuilder.build();
}


/**
 * 为 post请求设置参数
 *
 * @param params 请求参数
 * @return FormBody
 */
private static FormBody createFormBody(Map<String, Object> params) {
    FormBody.Builder builder = new FormBody.Builder();
    if (params != null && params.size() > 0) {
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            builder.add(entry.getKey(), String.valueOf(entry.getValue()));
        }
    }
    return builder.build();
}


/**
 * 同步执行 http请求
 *
 * @param call call对象
 * @return 响应结果
 */
public static String execute(Call call) {
    String respStr = "";
    try {
        ResponseBody body = call.execute().body();
        if (body != null) {
            respStr = body.string();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return respStr;
}

/**
 * 同步执行 http请求
 *
 * @param call call对象
 * @return 响应结果
 */
public static InputStream executeAndReturnStream(Call call) {
    InputStream respStr =  null;
    try {
        ResponseBody body = call.execute().body();
        if (body != null) {
            return body.byteStream();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return respStr;
}


/**
 * 将inputstream转为Base64
 *
 * @param is
 * @return
 * @throws Exception
 */
public static String inputStreamToBase64(InputStream is) throws Exception {
    byte[] data = null;
    try {
        ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
        byte[] buff = new byte[100];
        int rc = 0;
        while ((rc = is.read(buff, 0, 100)) > 0) {
            swapStream.write(buff, 0, rc);
        }
        data = swapStream.toByteArray();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            try {
                is.close();
            } catch (IOException e) {
                throw new Exception("输入流关闭异常");
            }
        }
    }

    return Base64.encodeBase64String(data);
}

}

import javax.net.ssl.*;

import java.net.Socket;

import java.security.SecureRandom;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

public class SkipSSLSocketClient {

/**
 * 获取TrustManager
 * 对于在Android 10及以上的设备上,会出现设备信任问题[用X509ExtendedTrustManager兼容]
 */
public static X509ExtendedTrustManager X509 = new X509ExtendedTrustManager() {
    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
        // TODO document why this method is empty
    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s, Socket socket) throws CertificateException {
        // TODO document why this method is empty
    }

    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
        // TODO document why this method is empty
    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s, SSLEngine sslEngine) throws CertificateException {
        // TODO document why this method is empty
    }

    @Override
    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        // TODO document why this method is empty
    }

    @Override
    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
        // TODO document why this method is empty
    }

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

/**
 * 获取这个SSLSocketFactory
 */
public static SSLSocketFactory getSSLSocketFactory() {
    try {
        SSLContext sslContext = SSLContext.getInstance("SSL");
        sslContext.init(null, new TrustManager[]{X509}, new SecureRandom());
        return sslContext.getSocketFactory();
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}


/**
 * 获取HostnameVerifier
 */
public static HostnameVerifier getHostnameVerifier() {
    return (s, sslSession) -> true;
}

}

相关推荐
bing_1583 分钟前
Java 中求两个 List集合的交集元素
java·list
工业互联网专业22 分钟前
基于springboot+vue的高校社团管理系统的设计与实现
java·vue.js·spring boot·毕业设计·源码·课程设计
九圣残炎24 分钟前
【ElasticSearch】 Java API Client 7.17文档
java·elasticsearch·搜索引擎
m0_748251521 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
Bro_cat2 小时前
深入浅出JSON:数据交换的轻量级解决方案
java·ajax·java-ee·json
等一场春雨2 小时前
Java设计模式 五 建造者模式 (Builder Pattern)
java·设计模式·建造者模式
hunzi_12 小时前
Java和PHP开发的商城系统区别
java·php
V+zmm101342 小时前
教育培训微信小程序ssm+论文源码调试讲解
java·数据库·微信小程序·小程序·毕业设计
十二同学啊2 小时前
Spring Boot 中的 InitializingBean:Bean 初始化背后的故事
java·spring boot·后端
我劝告了风*2 小时前
NIO | 什么是Java中的NIO —— 结合业务场景理解 NIO (二)
java·nio