基于okhttp3封装。
一、定义接口返回对象
public class ResponseObj {
int httpCode;
String result;
Headers header;
public int getHttpCode() {
return httpCode;
}
public void setHttpCode(int httpCode) {
this.httpCode = httpCode;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public Headers getHeader() {
return header;
}
public void setHeader(Headers header) {
this.header = header;
}
}
二、定义接口HttpClientService
public interface HttpClientService {
/**
* 同步http请求
*
* @param request request
* @return response
*/
public Response executeRequestSync(Request request);
/**
* 异步http请求(未测试,慎用)
*
* @param request request
* @param callback 回调
*/
public void executeRequestAsync(Request request, Callback callback);
}
三、接口实现
public class HttpClientServiceImpl implements HttpClientService {
private static final Integer CLIENT_TIMEOUT_SECONDS_DEFAULT=30;
private static OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(CLIENT_TIMEOUT_SECONDS_DEFAULT, TimeUnit.SECONDS)
.readTimeout(CLIENT_TIMEOUT_SECONDS_DEFAULT, TimeUnit.SECONDS)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String s, SSLSession sslSession) {
return true;
}
})
.build();
public static HttpClientServiceImpl httpClientService = new HttpClientServiceImpl();
// singleTon class 单例
public static HttpClientServiceImpl getHttpClientService(){
if (httpClientService == null){
httpClientService = new HttpClientServiceImpl();
}
return httpClientService;
}
@Override
public Response executeRequestSync(Request request) {
try {
return client.newCall(request).execute();
} catch (IOException e) {
return new Response.Builder()
.request(request)
.protocol(Protocol.HTTP_1_1)
.code(404)
.message(e.getMessage())
.build();
}
}
@Override
public void executeRequestAsync(Request request, Callback callback) {
client.newCall(request).enqueue(callback);
}
}
四、请求方法封装
public class HttpUtil {
public static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");
/***
* json
* string requestBody
*/
public static ResponseObj getResponse(String url, String method, Map<String, String> headers, String requestBody){
HttpClientService httpClientService = getHttpClientService();
Request request = getRequestWithStringBody(url, method, headers, requestBody);
Response response = httpClientService.executeRequestSync(request);
return buildResponse(response);
}
/***
* json
* Map requestBody
*/
public static ResponseObj getResponse(String url, String method, Map<String, String> headers, Map<String, String> requestBody){
HttpClientService httpClientService = getHttpClientService();
Request request = getRequestWithMapBody(url, method, headers, requestBody);
Response response = httpClientService.executeRequestSync(request);
return buildResponse(response);
}
/***
* FormData
* Map FormData
*/
public static ResponseObj getResponseWithFormData(String url, String method, Map<String, String> headers, Map<String, String> formData){
HttpClientService httpClientService = getHttpClientService();
Request request = getRequestWithFormData(url, method, headers, formData);
Response response = httpClientService.executeRequestSync(request);
return buildResponse(response);
}
/***
* FormData
* post
* header = null
* Map FormData
*/
public static ResponseObj getResponseWithFormData(String url, Map<String, String> formData){
HttpClientService httpClientService = getHttpClientService();
Request request = getRequestWithFormData(url, "POST", null, formData);
Response response = httpClientService.executeRequestSync(request);
return buildResponse(response);
}
/**
* json
* post
* header = null
*Map requestBody
*/
public static ResponseObj postRequest(String url, Map<String, String> requestBody){
HttpClientService httpClientService = getHttpClientService();
Request request = getRequestWithMapBody(url, "POST", null, requestBody);
Response response = httpClientService.executeRequestSync(request);
return buildResponse(response);
}
//------------- 内部方法
/*
* 支持 form-data 类型的body
* */
private static Request getRequestWithFormData(String url,
String method,
Map<String, String> requestHeader,
Map<String, String> body){
Request.Builder builder = new Request.Builder();
builder.url(url);
if (requestHeader != null){
for(String key:requestHeader.keySet()){
builder.addHeader(key, requestHeader.get(key));
}
}
FormBody.Builder bodyBuilder = new FormBody.Builder(Charset.forName("UTF-8"));
for (Map.Entry<String, String> entry : body.entrySet()) {
bodyBuilder.addEncoded(entry.getKey(), entry.getValue().toString());
}
FormBody formBodybody = bodyBuilder.build();
if (method.equalsIgnoreCase("GET")){
builder.get();
}
if (method.equalsIgnoreCase("POST")){
builder.post(formBodybody);
}
return builder.build();
}
/*
* 支持 Map 类型的body 直接传入, 并转换成json String类型
* */
private static Request getRequestWithMapBody(String url, String method,
Map<String, String> requestHeader,
Map<String, String> body){
JSONObject jsonObject = new JSONObject();
Request.Builder builder = new Request.Builder();
builder.url(url);
if (requestHeader != null){
for(String key:requestHeader.keySet()){
builder.addHeader(key, requestHeader.get(key));
}
}
if (body != null){
jsonObject.putAll(body);
}
RequestBody requestBody = RequestBody.create(JSON_TYPE, jsonObject.toString());
if (method.equalsIgnoreCase("GET")){
builder.get();
}
if (method.equalsIgnoreCase("POST")){
builder.post(requestBody);
}
return builder.build();
}
private static ResponseObj buildResponse(Response response){
ResponseObj responseObj = new ResponseObj();
responseObj.setHttpCode(response.code());
responseObj.setHeader(response.headers());
try {
responseObj.setResult(response.body().string());
} catch (IOException e) {
e.printStackTrace();
}
finally {
if (response != null && response.body() != null){
response.body().close();
response.close();
}
}
return responseObj;
}
/*
* 支持String 类型body 直接传入
* */
private static Request getRequestWithStringBody(String url, String method, Map<String, String> requestHeader, String body){
Request.Builder builder = new Request.Builder();
builder.addHeader("Content-Type", "application/json;charset=utf-8");
builder.url(url);
if (requestHeader != null){
for(String key:requestHeader.keySet()){
builder.addHeader(key, requestHeader.get(key));
}
}
RequestBody requestBody = RequestBody.create(null, body);
if (method.equalsIgnoreCase("GET")){
builder.get();
}
if (method.equalsIgnoreCase("POST")){
builder.post(requestBody);
}
return builder.build();
}
}
五、再次根据实际需要封装
public class MyHttpUtil {
/***
*
* get请求无参数
*/
public static ResponseObj sendGet(String url, Map<String, String> header){
return HttpUtil.getResponse(url, "GET", header, "");
}
/***
*
* get请求 需要参数
*/
public static ResponseObj sendGet(String url, Map<String, String> header,Map<String,String> parm){
if (parm.size()>0){
String parms = "";
Set<String> keys = parm.keySet();
for( String key : keys){
parms = parms + key + "="+ parm.get(key)+"&";
}
url = url + "?"+ parms;
}
return HttpUtil.getResponse(url, "GET", header, "");
}
/***
*
* post请求 json-body
*/
public static ResponseObj sendPostWithJson(String url, Map<String, String> header,String body){
return HttpUtil.getResponse(url, "POST", header, body);
}
/***
*
* post请求 json-FormData
*/
public static ResponseObj sendPostWithFormData(String url, Map<String, String> header ,Map<String, String> formData){
return HttpUtil.getResponseWithFormData(url,"POST",header,formData);
}
}