packagecom.opentrans.otms.kaka.wx.utils;importjava.io.File;importjava.net.URI;importjava.nio.charset.Charset;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;importcom.lcc.handler.CommonResponseHandler;importcom.lcc.handler.IResponseHandler;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.client.methods.HttpPut;importorg.apache.http.config.ConnectionConfig;importorg.apache.http.entity.StringEntity;importorg.apache.http.entity.mime.MultipartEntityBuilder;importorg.apache.http.entity.mime.content.FileBody;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClientBuilder;importorg.apache.http.util.EntityUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.util.CollectionUtils;importcom.lcc.dto.ActionResult;public classHttpUtils {private static Logger LOGGER = LoggerFactory.getLogger(HttpUtils.class);public staticCloseableHttpClient buildHttpClient() {
HttpClientBuilder httpClientBuilder=HttpClientBuilder.create().useSystemProperties();
httpClientBuilder.setDefaultConnectionConfig(
ConnectionConfig.custom().setCharset(Charset.forName("UTF-8")).build());
CloseableHttpClient httpClient=httpClientBuilder.build();returnhttpClient;
}public staticActionResult get(String url) {return get(url, null, null);
}public static ActionResult get(String url, Mapheaders) {return get(url, null, headers);
}public static ActionResult get(String url, List params, Mapheaders) {
ActionResult result= newActionResult();
CloseableHttpClient httpClient=buildHttpClient();
HttpGet request= null;try{
request= newHttpGet(url);if (!CollectionUtils.isEmpty(params)) {
String str= EntityUtils.toString(newUrlEncodedFormEntity(params));
request.setURI(new URI(url + "?" +str));
}if (headers != null) {for (Entryentry : headers.entrySet()) {
request.addHeader(entry.getKey(), entry.getValue());
}
}
LOGGER.info("Send request: " +request.getURI());
HttpResponse response=httpClient.execute(request);
HttpEntity entity=response.getEntity();
String body= EntityUtils.toString(entity, "UTF-8");if (entity != null) {
EntityUtils.consume(entity);
}int code =response.getStatusLine().getStatusCode();
solveResponse(code, body, result,null);
}catch(Exception e) {
result.setStatus(ActionResult.FAIL);
result.setMessage(e.getMessage());
LOGGER.error("Failed to receive response:", e);
}finally{
closeHttpClient(httpClient);
}returnresult;
}public staticActionResult post(String url, String content, String contentType) {return post(url, content, null, contentType);
}public static ActionResult post(String url, String content, Mapheaders, String contentType) {return post(url, content, headers, contentType, null);
}public static ActionResult post(String url, String content, Mapheaders, String contentType,
IResponseHandler responseHandler) {
ActionResult result= newActionResult();
CloseableHttpClient httpClient=buildHttpClient();
HttpPost request= null;try{
request= newHttpPost(url);
StringEntity payload= new StringEntity(content, "UTF-8");
payload.setContentType(contentType);
payload.setContentEncoding("UTF-8");
request.setEntity(payload);if (headers != null) {for (Entryentry : headers.entrySet()) {
request.addHeader(entry.getKey(), entry.getValue());
}
}
LOGGER.info("Send request: " +request.getURI());
LOGGER.info("The payload: " +content);
HttpResponse response=httpClient.execute(request);
HttpEntity entity=response.getEntity();
String body= EntityUtils.toString(entity, "UTF-8");if (entity != null) {
EntityUtils.consume(entity);
}int code =response.getStatusLine().getStatusCode();
solveResponse(code, body, result, responseHandler);
}catch(Exception e) {
result.setStatus(ActionResult.FAIL);
result.setMessage(e.getMessage());
LOGGER.error("Failed to receive response:", e);
}finally{
closeHttpClient(httpClient);
}returnresult;
}public static ActionResult postFile(String url, Map files, Mapheaders,
String contentType) {
ActionResult result= newActionResult();
CloseableHttpClient httpClient=buildHttpClient();
HttpPost request= null;try{
request= newHttpPost(url);if (headers != null) {for (Entryentry : headers.entrySet()) {
request.addHeader(entry.getKey(), entry.getValue());
}
}
MultipartEntityBuilder entityBuilder=MultipartEntityBuilder.create();
String fileName= "";for (Entryentry : files.entrySet()) {
fileName=entry.getKey();
FileBody file= newFileBody(entry.getValue());
entityBuilder.addPart(entry.getKey(), file);
}
request.setEntity(entityBuilder.build());
request.setHeader("Content-Disposition", "attachment;filename=" +fileName);
LOGGER.info("Send request: " +request.getURI());
HttpResponse response=httpClient.execute(request);
HttpEntity entity=response.getEntity();
String body=EntityUtils.toString(entity);if (entity != null) {
EntityUtils.consume(entity);
}int code =response.getStatusLine().getStatusCode();
solveResponse(code, body, result,null);
}catch(Exception e) {
result.setStatus(ActionResult.FAIL);
result.setMessage(e.getMessage());
LOGGER.error("Failed to receive response:", e);
}finally{
closeHttpClient(httpClient);
}returnresult;
}public staticActionResult put(String url, String content, String contentType) {return put(url, content, null, contentType);
}public static ActionResult put(String url, String content, Mapheaders, String contentType) {
ActionResult result= newActionResult();
CloseableHttpClient httpClient=buildHttpClient();
HttpPut request= null;try{
request= newHttpPut(url);
StringEntity payload= new StringEntity(content, "UTF-8");
payload.setContentType(contentType);
payload.setContentEncoding("UTF-8");
request.setEntity(payload);if (headers != null) {for (Entryentry : headers.entrySet()) {
request.addHeader(entry.getKey(), entry.getValue());
}
}
LOGGER.info("Send request: " +request.getURI());
LOGGER.info("The payload: " +content);
HttpResponse response=httpClient.execute(request);
HttpEntity entity=response.getEntity();
String body= EntityUtils.toString(entity, "UTF-8");if (entity != null) {
EntityUtils.consume(entity);
}int code =response.getStatusLine().getStatusCode();
solveResponse(code, body, result,null);
}catch(Exception e) {
result.setStatus(ActionResult.FAIL);
result.setMessage(e.getMessage());
LOGGER.error("Failed to receive response:", e);
}finally{
closeHttpClient(httpClient);
}returnresult;
}private static void solveResponse(intcode, String body, ActionResult result, IResponseHandler responseHandler) {
LOGGER.info("Received response, the code is " + code + ", the content is" +body);if (responseHandler == null) {
responseHandler= newCommonResponseHandler();
}
responseHandler.processResponse(code, body, result);
}private static voidcloseHttpClient(CloseableHttpClient httpClient) {try{if (httpClient != null) {
httpClient.close();
}
}catch(Exception e) {
LOGGER.error("httpclient close exception", e);
}
}
}