pom.xml添加依赖
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.3</version>
</dependency>
OkHttpConfiguration.java
package cn.cuiot.municipal.gather.utils;
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.concurrent.TimeUnit;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import okhttp3.ConnectionPool;
import okhttp3.OkHttpClient;
@Slf4j
@Component
@ConfigurationProperties(prefix = "okhttp")
@Data
public class OkHttpConfiguration {
@Value("${connect-timeout:30}")
private Integer connectTimeout;
@Value("${read-timeout:30}")
private Integer readTimeout;
@Value("${write-timeout:30}")
private Integer writeTimeout;
@Value("${max-idle-connections:200}")
private Integer maxIdleConnections;
@Value("${keep-alive-duration:300}")
private Long keepAliveDuration;
@Bean
public OkHttpClient okHttpClient() {
return new OkHttpClient.Builder().sslSocketFactory(sslSocketFactory(), x509TrustManager())
.retryOnConnectionFailure(false)
.connectionPool(pool())
.connectTimeout(connectTimeout, TimeUnit.SECONDS)
.readTimeout(readTimeout, TimeUnit.SECONDS).writeTimeout(writeTimeout, TimeUnit.SECONDS)
.hostnameVerifier((hostname, session) -> true)
.build();
}
@Bean
public X509TrustManager x509TrustManager() {
return new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
};
}
@Bean
public SSLSocketFactory sslSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] { x509TrustManager() }, new SecureRandom());
return sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
e.printStackTrace();
}
return null;
}
@Bean
public ConnectionPool pool() {
return new ConnectionPool(maxIdleConnections, keepAliveDuration, TimeUnit.SECONDS);
}
}
yml配置
okhttp:
connect-timeout: 30
read-timeout: 30
write-timeout: 30
max-idle-connections: 200
keep-alive-duration: 300
OkHttpHelper.java编写
package cn.cuiot.municipal.gather.utils;
import java.io.IOException;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.nacos.common.utils.Objects;
import lombok.extern.slf4j.Slf4j;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Headers;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.ResponseBody;
@Slf4j
@Component
public class OkHttpHelper {
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
private static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");
@Autowired
private OkHttpClient okHttpClient;
public String doGet(String url) {
return doGet(url, null, null);
}
public String doGet(String url, Map<String, String> params) {
return doGet(url, params, null);
}
public String doGet(String url, Headers headers) {
return doGet(url, null, headers);
}
public String doGet(String url, Map<String, String> params, Headers headers) {
StringBuilder sb = new StringBuilder(url);
if (params != null && params.keySet().size() > 0) {
boolean firstFlag = true;
for (String key : params.keySet()) {
if (firstFlag) {
sb.append("?").append(key).append("=").append(params.get(key));
firstFlag = false;
} else {
sb.append("&").append(key).append("=").append(params.get(key));
}
}
}
Request.Builder builder = new Request.Builder();
Request request = builder.url(sb.toString()).build();
if (Objects.nonNull(headers)) {
builder.headers(headers);
}
log.info("do get request and url[{}]", sb.toString());
return execute(request);
}
public String doPost(String url, Map<String, String> params) {
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();
log.info("do post request and url[{}] and params = {}", url, params);
return execute(request);
}
public String doPostJson(String url, String json) {
log.info("do post request and url[{}]and json[{json}]", url);
return exectePost(url, json, JSON);
}
public String doPostXml(String url, String xml) {
log.info("do post request and url[{}]", url);
return exectePost(url, xml, XML);
}
private String exectePost(String url, String data, MediaType contentType) {
RequestBody requestBody = RequestBody.create(data, contentType);
Request request = new Request.Builder().url(url).post(requestBody).build();
return execute(request);
}
private String execute(Request request) {
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
ResponseBody result = response.body();
String resutlStr = result.string();
log.info("okhttp.result=={}", resutlStr);
return resutlStr;
} catch (Exception e) {
e.printStackTrace();
} finally {
if (response != null) {
response.close();
}
}
return "";
}
public void enqueue(Request request, Callback responseCallback) {
okHttpClient.newCall(request).enqueue(responseCallback);
}
private void enqueue(Request request) {
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
log.error("", e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()) {
log.info("Successful data acquisition . . . ");
log.info("response.code()==" + response.code());
log.info("response.body().string()==" + response.body().string());
}
}
});
}
}
引用示例
@Autowired
private OkHttpHelper okHttpHelper;
String url = "http://www.baidu.com";
String res = okHttpHelper.doGet(hccUrl + url);
JSONObject jb = JSONObject.parseObject(res);
private String get(String url, Map<String, Object> params) {
Headers.Builder headersbuilder = new Headers.Builder();
headersbuilder.add("Authorization", this.getToken());
Headers headers = headersbuilder.build();
return okHttpHelper.doGet(hccUrl + url, params, headers);
}