import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Map;
import java.util.TreeMap;
import java.util.Map.Entry;java
import org.apache.commons.lang.StringUtils;apache
import com.alibaba.fastjson.JSONObject;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Request.Builder;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
import com.squareup.okhttp.ResponseBody;json
/**
* OkHttpclient请求处理类
* 2018年12月19日
*/
public class OkHttpClientUtil {
//默认请求的文本参数类型
private static final String DEFAULT_CONTENT_TYPE = "application/x-www-form-urlencoded";
private static final String DEFAULT_CACHE_CTRL = "no-cache";
/**
* 发送请求
* 2018年12月19日
* @param url 必传,访问接口的url
* @param contentType 非必传,默认为urlEncoded
* @param parameters 必传,消息体类型
* @param headers 必传,消息头格式设置
* @return 成功响应后的内容字符串:异常结果为null
* @throws Exception
*/
public static JSONObject sendPost(String url,String contentType,Map<String,Object> parameters, Map<String,String> headers) throws Exception {
if (StringUtils.isBlank(contentType)) {
contentType = DEFAULT_CONTENT_TYPE;
}
//构建client,处理入参
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse(contentType);
RequestBody body = RequestBody.create(mediaType, convertMap2Str(parameters));
//设置消息头
Builder builder = new Request.Builder().url(url).post(body);
builder.addHeader("Content-Type", DEFAULT_CONTENT_TYPE);
builder.addHeader("cache-control", DEFAULT_CACHE_CTRL);
//若是headers不为空,从新设置消息头
if (headers != null && !headers.isEmpty()) {
for(Entry<String,String> entry : headers.entrySet()) {
builder.addHeader(entry.getKey(), entry.getValue());
}
}
//创建链接,发送请求
Request request = builder.build();
Response response = client.newCall(request).execute();
//返回json格式数据,带成功失败码
JSONObject result = new JSONObject();
result.put("code", response.code());
if (response.code() == 200) {
ResponseBody rb = response.body();
InputStream in = rb.byteStream();
//从流中解析结构并返回
BufferedReader streamReader = new BufferedReader(new InputStreamReader(in,"UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
responseStrBuilder.append(inputStr);
result.put("result", responseStrBuilder.toString());
} else {
result.put("message", response.message());
}
return result;
}
/**
* 将map参数转换成string
* 2018年12月19日
* @param inMap
* @return
*/
public static String convertMap2Str(Map<String,Object> inMap) {
if (!(inMap instanceof TreeMap)) {
inMap = new TreeMap<>(inMap);
}
StringBuffer sb = new StringBuffer();
for(Entry<String,Object> entry : inMap.entrySet()) {
Object value = entry.getValue();
sb.append(entry.getKey()).append("=").append(value).append("&");
}
if(sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
}app