import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import okhttp3.*;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* @author
* @version 1.0
* @date 2022/4/21 14:21
* @desc 测试
*/
public class OKHttpUtils {
private static final Logger logger = LoggerFactory.getLogger(OKHttpUtil2.class);
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @return JSONObject
*/
public JSONObject JSONObjectByMap(String url, Map<String,Object> bodyMap) {
Response response = ResponseByMap(url, bodyMap, HTTP_METHOD.GET, null);
try {
String result = response.body().string();
JSONObject jsonObject = JSONObject.parseObject(result);//转为JSON格式
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @param type 请求方式
* @return JSONObject
*/
public JSONObject JSONObjectByMap(String url, Map<String,Object> bodyMap, HTTP_METHOD type) {
Response response = ResponseByMap(url, bodyMap, type, null);
try {
String result = response.body().string();
JSONObject jsonObject = JSONObject.parseObject(result);//转为JSON格式
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @param headers 设置请求头信息
* @return JSONObject
*/
public JSONObject JSONObjectByMap(String url, Map<String,Object> bodyMap, Map<String,String> headers) {
Response response = ResponseByMap(url, bodyMap, HTTP_METHOD.GET, headers);
try {
String result = response.body().string();
JSONObject jsonObject = JSONObject.parseObject(result);//转为JSON格式
return jsonObject;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @return Response
*/
public Response ResponseByMap(String url, Map<String,Object> bodyMap) {
return ResponseByMap(url,bodyMap, HTTP_METHOD.GET,null);
}
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @param type 请求方式
* @return Response
*/
public Response ResponseByMap(String url, Map<String,Object> bodyMap, HTTP_METHOD type) {
Response response = ResponseByMap(url, bodyMap, type, null);
if (ObjectUtils.isEmpty(response)) {
throw new RuntimeException(String.format("请求地址:{},response为空", url));
}
if (HttpStatus.OK.value() != response.code()) {
throw new RuntimeException();
}
return response;
}
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @param headers 设置请求头信息
* @return Response
*/
public Response ResponseByMap(String url, Map<String,Object> bodyMap,Map<String,String> headers) {
return ResponseByMap(url,bodyMap, HTTP_METHOD.GET,headers);
}
/**
* 通过表单数据参数填入
* @param url 请求地址
* @param bodyMap 请求参数
* @param type 请求方式
* @param headers 设置请求头信息
* @return Response
*/
public static Response ResponseByMap(String url, Map<String,Object> bodyMap, HTTP_METHOD type, Map<String,String> headers) {
OkHttpClient okHttpClient = new OkHttpClient
.Builder()
.connectTimeout(60 * 1000, TimeUnit.MILLISECONDS)
.readTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS)
.writeTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS)
.build();
FormBody.Builder builder = new FormBody.Builder();
if (bodyMap !=null){
bodyMap.forEach((k,v)->{
if (v==null){
return;
}
builder.add(k,v.toString());
});
}
RequestBody requestBody = builder.build();
Request.Builder requestBuilder = new Request.Builder();
// 设置请求方式
if(ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.POST){
requestBuilder.post(requestBody);
requestBuilder.url(url);
} else if (ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.PUT){
requestBuilder.put(requestBody);
requestBuilder.url(url);
} else if (ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.DELETE){
requestBuilder.delete(requestBody);
requestBuilder.url(url);
} else if (ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.GET) {
StringBuffer sb = getQueryString(url, bodyMap);
requestBuilder.url(sb.toString());
}
//设置请求头
if(CollectionUtils.isNotEmpty(headers)){
requestBuilder.headers(Headers.of(headers));
}
Request request = requestBuilder.build();
Call call = okHttpClient.newCall(request);
try {
Response response = call.execute();
return response;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/* 以上通过通过表单方式提交请求, 以下通过Json方式提交请求*/
/**
* 通过json数据参数填入
* @param url 请求地址
* @param jsonParams json请求头
* @param type 请求方式
* @param headers 设置请求头信息
* @return Response
*/
public static Response ResponseByJsonParams(String url, String jsonParams, HTTP_METHOD type, Map<String,String> headers) {
OkHttpClient okHttpClient = new OkHttpClient
.Builder()
.connectTimeout(60 * 1000, TimeUnit.MILLISECONDS)
.readTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS)
.writeTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS)
.build();
Request.Builder requestBuilder = new Request.Builder();
RequestBody requestBody = null;
// 设置请求体内容
if (StringUtils.isNotEmpty(jsonParams)){
requestBody = RequestBody.create(jsonParams, MediaType.parse("application/json; charset=utf-8"));
}
// 设置请求方式
if(ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.POST){
requestBuilder.post(requestBody);
requestBuilder.url(url);
} else if (ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.PUT){
requestBuilder.put(requestBody);
requestBuilder.url(url);
} else if (ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.DELETE){
requestBuilder.delete(requestBody);
requestBuilder.url(url);
} else if (ObjectUtils.isNotEmpty(type) && type== HTTP_METHOD.GET) {
requestBuilder.url(url);
}
//设置请求头
if(CollectionUtils.isNotEmpty(headers)){
requestBuilder.headers(Headers.of(headers));
}
Request request = requestBuilder.build();
Call call = okHttpClient.newCall(request);
try {
Response response = call.execute();
if (ObjectUtils.isEmpty(response)) {
throw new RuntimeException(String.format("请求地址:{},response为空", url));
}
if (HttpStatus.OK.value() != response.code()) {
throw new RuntimeException();
}
return response;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 根据map获取get请求参数
*
* @param queries
* @return
*/
public static StringBuffer getQueryString(String url, Map<String, Object> queries) {
StringBuffer sb = new StringBuffer(url);
if (queries != null && queries.keySet().size() > 0) {
boolean firstFlag = true;
Iterator iterator = queries.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry entry = (Map.Entry<String, String>) iterator.next();
if (firstFlag) {
sb.append("?" + entry.getKey() + "=" + entry.getValue());
firstFlag = false;
} else {
sb.append("&" + entry.getKey() + "=" + entry.getValue());
}
}
}
logger.info("http请求地址为:{}", sb.toString());
return sb;
}
enum HTTP_METHOD {
GET,
POST,
PUT,
DELETE,
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/4809.html