Okhttp 使用 get post 文件请求 java
·
导入依赖
<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 "";
}
}
更多推荐



所有评论(0)