|
@ -0,0 +1,336 @@
|
|
|
package com.yihu.jw.util.http;
|
|
|
|
|
|
import okhttp3.*;
|
|
|
import org.apache.commons.logging.Log;
|
|
|
import org.apache.commons.logging.LogFactory;
|
|
|
|
|
|
import java.io.File;
|
|
|
import java.io.IOException;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.net.URLEncoder;
|
|
|
import java.util.Map;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* @author Airhead
|
|
|
* @since 2016/8/24.
|
|
|
*/
|
|
|
class DefaultClientImpl implements HTTPClient {
|
|
|
private static final Log log = LogFactory.getLog(DefaultClientImpl.class);
|
|
|
|
|
|
private OkHttpClient httpClient;
|
|
|
|
|
|
DefaultClientImpl() {
|
|
|
this.httpClient = new OkHttpClient.Builder().connectTimeout(60, TimeUnit.SECONDS)
|
|
|
.readTimeout(60, TimeUnit.SECONDS)
|
|
|
.writeTimeout(60, TimeUnit.SECONDS).build();
|
|
|
}
|
|
|
|
|
|
public HTTPResponse get(String url) {
|
|
|
return get(url, null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse get(String url, Map<String, String> params) {
|
|
|
return get(url, params, null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse get(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
try {
|
|
|
Request.Builder builder = new Request.Builder();
|
|
|
if (headers != null) {
|
|
|
builder.headers(Headers.of(headers));
|
|
|
}
|
|
|
Request request = builder
|
|
|
.url(formatURL(url, params))
|
|
|
.build();
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
// ?? 怎么把异常处理了?? 应该交由调用者处理
|
|
|
ex.printStackTrace();
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417,ex.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public HTTPResponse post(String url) {
|
|
|
return post(url, (Map<String, String>) null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse post(String url, Map<String, String> params) {
|
|
|
return post(url, params, null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse post(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
try {
|
|
|
FormBody.Builder fromBodyBuilder = new FormBody.Builder();
|
|
|
if (params != null) {
|
|
|
params.forEach(fromBodyBuilder::add);
|
|
|
}
|
|
|
RequestBody requestBody = fromBodyBuilder
|
|
|
.build();
|
|
|
|
|
|
Request.Builder builder = new Request.Builder();
|
|
|
if (headers != null) {
|
|
|
builder.headers(Headers.of(headers));
|
|
|
}
|
|
|
Request request = builder
|
|
|
.url(url)
|
|
|
.post(requestBody)
|
|
|
.build();
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
//讲异常信息返回,交由调用者处理
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417,ex.getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public HTTPResponse post(String url, String json, Map<String, String> headers) {
|
|
|
try {
|
|
|
Request.Builder builder = new Request.Builder();
|
|
|
if (headers != null) {
|
|
|
builder.headers(Headers.of(headers));
|
|
|
}
|
|
|
|
|
|
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
|
|
RequestBody body = RequestBody.create(JSON, json);
|
|
|
Request request = builder
|
|
|
.url(url)
|
|
|
.post(body)
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public HTTPResponse postFile(String url, String path) {
|
|
|
return postFile(url, path, null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse postFile(String url, String path, Map<String, String> params) {
|
|
|
return postFile(url, path, params, null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse postFile(String url, String path, Map<String, String> params, Map<String, String> headers) {
|
|
|
try {
|
|
|
File file = new File(path);
|
|
|
|
|
|
final MediaType type = MediaType.parse("application/zip");
|
|
|
Request.Builder requestBuilder = new Request.Builder();
|
|
|
if (headers != null) {
|
|
|
requestBuilder.headers(Headers.of(headers));
|
|
|
}
|
|
|
MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
|
|
|
multipartBuilder.setType(MultipartBody.FORM)
|
|
|
.addFormDataPart("pack", file.getName(), RequestBody.create(type, file));
|
|
|
for (String key : params.keySet()) {
|
|
|
multipartBuilder.addFormDataPart(key, params.get(key));
|
|
|
}
|
|
|
Request request = requestBuilder
|
|
|
.url(url)
|
|
|
.post(multipartBuilder.build())
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public HTTPResponse postFile(String url, String key, String path, String contentType) {
|
|
|
try {
|
|
|
File file = new File(path);
|
|
|
|
|
|
final MediaType type = MediaType.parse(contentType);
|
|
|
Request.Builder requestBuilder = new Request.Builder();
|
|
|
MultipartBody.Builder multipartBuilder = new MultipartBody.Builder();
|
|
|
multipartBuilder.setType(MultipartBody.FORM)
|
|
|
.addFormDataPart(key, file.getName(), RequestBody.create(type, file));
|
|
|
Request request = requestBuilder
|
|
|
.url(url)
|
|
|
.post(multipartBuilder.build())
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public HTTPResponse put(String url) {
|
|
|
return put(url, (Map<String, String>) null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse put(String url, Map<String, String> params) {
|
|
|
return put(url, params, null);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public HTTPResponse put(String url, String json) {
|
|
|
try {
|
|
|
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
|
|
RequestBody body = RequestBody.create(JSON, json);
|
|
|
Request request = new Request.Builder()
|
|
|
.url(url)
|
|
|
.put(body)
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
ex.printStackTrace();
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public HTTPResponse put(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
try {
|
|
|
FormBody.Builder fromBodyBuilder = new FormBody.Builder();
|
|
|
if (params != null) {
|
|
|
params.forEach(fromBodyBuilder::add);
|
|
|
}
|
|
|
RequestBody requestBody = fromBodyBuilder
|
|
|
.build();
|
|
|
|
|
|
Request.Builder builder = new Request.Builder();
|
|
|
if (headers != null) {
|
|
|
builder.headers(Headers.of(headers));
|
|
|
}
|
|
|
Request request = builder
|
|
|
.url(url)
|
|
|
.put(requestBody)
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public HTTPResponse delete(String url) {
|
|
|
return delete(url, (Map<String, String>) null);
|
|
|
}
|
|
|
|
|
|
public HTTPResponse delete(String url, Map<String, String> params) {
|
|
|
return delete(url, params, null);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public HTTPResponse delete(String url, String json) {
|
|
|
try {
|
|
|
final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
|
|
RequestBody body = RequestBody.create(JSON, json);
|
|
|
Request request = new Request.Builder()
|
|
|
.url(url)
|
|
|
.delete(body)
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public HTTPResponse delete(String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
try {
|
|
|
FormBody.Builder fromBodyBuilder = new FormBody.Builder();
|
|
|
if (params != null) {
|
|
|
params.forEach(fromBodyBuilder::add);
|
|
|
}
|
|
|
RequestBody requestBody = fromBodyBuilder
|
|
|
.build();
|
|
|
|
|
|
Request.Builder builder = new Request.Builder();
|
|
|
if (headers != null) {
|
|
|
builder.headers(Headers.of(headers));
|
|
|
}
|
|
|
Request request = builder
|
|
|
.url(url)
|
|
|
.delete(requestBody)
|
|
|
.build();
|
|
|
|
|
|
Response response = httpClient.newCall(request).execute();
|
|
|
|
|
|
return new HTTPResponse(response.code(), response.body().string());
|
|
|
} catch (IOException ex) {
|
|
|
log.error(ex.getMessage());
|
|
|
return new HTTPResponse(417, ex.getMessage());
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public HTTPResponse request(String method, String url, Map<String, String> params, Map<String, String> headers) {
|
|
|
if (method.equals(POST)) {
|
|
|
return post(url, params, headers);
|
|
|
}
|
|
|
|
|
|
if (method.equals(GET)) {
|
|
|
return get(url, params, headers);
|
|
|
}
|
|
|
|
|
|
if (method.equals(PUT)) {
|
|
|
return put(url, params, headers);
|
|
|
}
|
|
|
|
|
|
if (method.equals(DELETE)) {
|
|
|
return delete(url, params, headers);
|
|
|
}
|
|
|
|
|
|
return get(url, params, headers);
|
|
|
}
|
|
|
|
|
|
protected void setHttpClient(OkHttpClient okHttpClient) {
|
|
|
this.httpClient = okHttpClient;
|
|
|
}
|
|
|
|
|
|
private String formatURL(String url, Map<String, String> params) {
|
|
|
if (params == null) {
|
|
|
return url;
|
|
|
}
|
|
|
|
|
|
final String[] query = {""};
|
|
|
params.forEach((name, value) -> {
|
|
|
try {
|
|
|
query[0] += "&" + name + "=" + URLEncoder.encode(value, "UTF-8");
|
|
|
} catch (UnsupportedEncodingException e) {
|
|
|
throw new RuntimeException("encode url ");
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (url.contains("?")) {
|
|
|
return url + query[0];
|
|
|
}
|
|
|
|
|
|
return url + "?" + query[0].substring(1);
|
|
|
}
|
|
|
}
|