以下是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);
}