package com.vinsuan.park.platform.api;
import cn.hutool.core.date.DateUtil;
import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j;
import net.logstash.logback.encoder.org.apache.commons.lang.exception.ExceptionUtils;
import okhttp3.*;
import org.apache.commons.lang.StringUtils;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @Auther: stan
* @Date: 2018/10/16 10:35
* @Description: OkHttp工具類
*/
@Slf4j
public class HttpUtils {
// public static void main(String[] args) {
// Map<String,String> map = new HashMap<String,String>();
// map.put("areaId","2b3f2b9401c54d12b4cae7c313e031d3");
// map.put("beginTimeString","2019-10-28 08:00:00");
// map.put("carCategoryId","FEB92FAF665549EF89311A349E653D99");
// map.put("carTypeId","A1AE871218EB46879027D69A9889CCE9");
// map.put("pkid","adc29c0e5baf474a95b78d0a0ae3eb9d");
// map.put("endTimeString","2019-10-29 16:21:12");
// String resAmount = OkHttpUtil.post("URl", map);
// System.out.println("++++"+resAmount);
//
// Double value = Double.valueOf(resAmount);
// System.out.println(value>0);
// }
/**
* get
* @param url 請求的url
* @param queries 請求的參數,在瀏覽器?後面的數據,沒有可以傳null
* @return
*/
public static String get(String url, Map<String, Object> queries) {
String responseBody = "";
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());
}
}
}
Request request = new Request.Builder()
.url(sb.toString())
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 put error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
public static Response getResponse(String url, Map<String, Object> queries) {
Response responseBody = null;
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());
}
}
}
Request request = new Request.Builder()
.url(sb.toString())
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response;
}
} catch (Exception e) {
log.error("okhttp3 put error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
/**
* post
*
* @param url 請求的url
* @param params post form 提交的參數
* @return
*/
public static String post(String url, Map<String, String> params) {
String responseBody = "";
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();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
/**
* get
* @param url 請求的url
* @param queries 請求的參數,在瀏覽器?後面的數據,沒有可以傳null
* @return
*/
public static String getForHeader(String url, Map<String, Object> queries,String keyHeader,String valueHeader) {
String responseBody = "";
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());
}
}
}
Request request = new Request.Builder()
.addHeader(keyHeader, valueHeader)
.url(sb.toString())
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 put error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
/**
* Post請求發送JSON數據....{"name":"zhangsan","pwd":"123456"}
* 參數一:請求Url
* 參數二:請求的JSON
* 參數三:請求回調
*/
public static String postJsonParams(String url, String jsonParams) {
String responseBody = "";
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
private static FormBody getFormBody(Map<String, String> jsonParams){
String address = jsonParams.get("address");
if(StringUtils.isEmpty(address)){
return new FormBody.Builder()
.add("dorm_code",(String)jsonParams.get("dorm_code"))
.add("action",(String)jsonParams.get("action"))
.build();
}else{
return new FormBody.Builder()
.add("dorm_code",(String)jsonParams.get("dorm_code"))
.add("action",(String)jsonParams.get("action"))
.add("address",(String)jsonParams.get("address"))
.build();
}
}
public static Response postJsonParamsResponse(String url, Map<String, String> jsonParams) {
Response responseBody = null;
RequestBody requestBody = RequestBody.create(MediaType.parse("application/x-www-form-urlencoded"), jsonParams.toString());
FormBody formBody = getFormBody(jsonParams);
// FormBody formBody = new FormBody.Builder()
// .add("dorm_code",(String)jsonParams.get("dorm_code"))
// .add("action",(String)jsonParams.get("action"))
// .add("address",(String)jsonParams.get("address"))
// .build();
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.newBuilder().followRedirects(false).followSslRedirects(false).build();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response;
}
} catch (Exception e) {
log.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
public static String postJsonParamsForIpCast(String url, String jsonParams) {
String responseBody = "";
RequestBody requestBody = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonParams);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
byte[] b = response.body().bytes(); //獲取數據的bytes
String info = new String(b, "GB2312"); //然後將其轉爲gb2312
return info;
//return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
/**
* Post請求發送xml數據....
* 參數一:請求Url
* 參數二:請求的xmlString
* 參數三:請求回調
*/
public static String postXmlParams(String url, String xml) {
String responseBody = "";
RequestBody requestBody = RequestBody.create(MediaType.parse("application/xml; charset=utf-8"), xml);
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 post error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
/**
* delete
* @param url 請求的url
* @param queries 請求的參數,在瀏覽器?後面的數據,沒有可以傳null
* @return
*/
public static String delete(String url, Map<String, Object> queries) {
String responseBody = "";
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());
}
}
}
Request request = new Request.Builder()
.url(sb.toString())
.delete()
.build();
Response response = null;
try {
OkHttpClient okHttpClient = new OkHttpClient();
response = okHttpClient.newCall(request).execute();
int status = response.code();
if (response.isSuccessful()) {
return response.body().string();
}
} catch (Exception e) {
log.error("okhttp3 put error >> ex = {}", ExceptionUtils.getStackTrace(e));
} finally {
if (response != null) {
response.close();
}
}
return responseBody;
}
}