HttpTookit.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. package com.uas.eis.utils;
  2. import java.security.cert.CertificateException;
  3. import java.security.cert.X509Certificate;
  4. import java.util.HashMap;
  5. import java.util.Map;
  6. import javax.net.ssl.SSLContext;
  7. import com.google.gson.Gson;
  8. import com.uas.eis.beans.HttpResponseMessageVO;
  9. import com.uas.eis.beans.req.Req;
  10. import com.uas.eis.beans.result.BaseResult;
  11. import com.uas.eis.beans.result.Result;
  12. import com.uas.eis.exception.BaseException;
  13. import org.apache.commons.lang.StringUtils;
  14. import org.apache.http.HttpEntity;
  15. import org.apache.http.HttpStatus;
  16. import org.apache.http.client.config.RequestConfig;
  17. import org.apache.http.client.methods.CloseableHttpResponse;
  18. import org.apache.http.client.methods.HttpPost;
  19. import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
  20. import org.apache.http.conn.ssl.SSLContextBuilder;
  21. import org.apache.http.conn.ssl.TrustStrategy;
  22. import org.apache.http.entity.StringEntity;
  23. import org.apache.http.impl.client.CloseableHttpClient;
  24. import org.apache.http.impl.client.HttpClients;
  25. import org.apache.http.util.EntityUtils;
  26. import org.slf4j.Logger;
  27. import org.slf4j.LoggerFactory;
  28. /**
  29. * https 请求工具类
  30. *
  31. * @author huanghp
  32. * @date 2015年8月28日
  33. */
  34. public class HttpTookit {
  35. private static final Logger LOG = LoggerFactory.getLogger(HttpTookit.class);
  36. private static final CloseableHttpClient httpClient;
  37. public static final String CHARSET = "UTF-8";
  38. static {
  39. // 饱含模式实现 httpClient 单例
  40. httpClient = createSSLClientDefault();
  41. }
  42. private HttpTookit() {}
  43. public static CloseableHttpClient createSSLClientDefault() {
  44. RequestConfig config = RequestConfig.custom().setConnectTimeout(600000).setSocketTimeout(150000).build();
  45. try {
  46. SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
  47. // 信任所有
  48. @Override
  49. public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  50. return true;
  51. }
  52. }).build();
  53. SSLConnectionSocketFactory sslsf =
  54. new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
  55. return HttpClients.custom().setSSLSocketFactory(sslsf).setDefaultRequestConfig(config).build();
  56. } catch (Exception e) {
  57. LOG.error("init httpClient error, details:", e);
  58. }
  59. return HttpClients.createDefault();
  60. }
  61. /**
  62. * post + json 发送请求
  63. *
  64. * @param url
  65. * @param parameters
  66. * @return @see HttpResponseMessageVO
  67. * @throws
  68. * @throws
  69. */
  70. public static HttpResponseMessageVO sendPostByJson(String url, String parameters) throws BaseException {
  71. if (StringUtils.isEmpty(url)) {
  72. throw new BaseException(Constants.interfaceException.ILLEGAL_ARGUMENT.code,
  73. Constants.interfaceException.ILLEGAL_ARGUMENT.msg + ": url is illegal !");
  74. }
  75. HttpResponseMessageVO httpResponseMessageVO = new HttpResponseMessageVO();
  76. CloseableHttpResponse response = null;
  77. HttpEntity entity = null;
  78. try {
  79. StringEntity params = new StringEntity(parameters, CHARSET);
  80. HttpPost request = new HttpPost(url);
  81. request.addHeader("Content-type", "application/json");
  82. request.setEntity(params);
  83. response = httpClient.execute(request);
  84. int statusCode = response.getStatusLine().getStatusCode();
  85. entity = response.getEntity();
  86. httpResponseMessageVO.setHttpCode(Integer.toString(statusCode));
  87. if (statusCode == HttpStatus.SC_OK && entity != null) {
  88. httpResponseMessageVO.setContent(EntityUtils.toString(entity, CHARSET));
  89. }
  90. } catch (Exception e) {
  91. LOG.error("sendPostByJson error, details:", e);
  92. throw new BaseException(Constants.interfaceException.INTERFACE_EXCEPTION.code,
  93. Constants.interfaceException.INTERFACE_EXCEPTION.msg);
  94. }finally{
  95. try{
  96. if(entity != null){
  97. EntityUtils.consume(entity);
  98. }
  99. if(response != null){
  100. response.close();
  101. }
  102. }catch(Exception e){
  103. }
  104. }
  105. return httpResponseMessageVO;
  106. }
  107. private static Result<String> sendPostByJson(String url, Req req) {
  108. Result<String> result = new Result<String>();
  109. if (StringUtils.isEmpty(url)) {
  110. result.setCode(Constants.interfaceException.ILLEGAL_ARGUMENT.code);
  111. result.setMsg(Constants.interfaceException.ILLEGAL_ARGUMENT.msg + ":" + url);
  112. return result;
  113. }
  114. CloseableHttpResponse response = null;
  115. HttpEntity entity = null;
  116. try {
  117. StringEntity params = new StringEntity(new Gson().toJson(req), CHARSET);
  118. HttpPost request = new HttpPost(url);
  119. request.addHeader("Content-type", "application/json");
  120. request.setEntity(params);
  121. response = httpClient.execute(request);
  122. int statusCode = response.getStatusLine().getStatusCode();
  123. entity = response.getEntity();
  124. if (statusCode == HttpStatus.SC_OK && entity != null) {
  125. result.setData(EntityUtils.toString(entity, CHARSET));
  126. } else {
  127. result.setCode(Constants.interfaceException.INTERFACE_EXCEPTION.code);
  128. result.setMsg(Constants.interfaceException.INTERFACE_EXCEPTION.msg + ":" + url + ",HTTP Status Code:"
  129. + statusCode);
  130. }
  131. } catch (Exception e) {
  132. LOG.error("sendPostByJson error, details:", e);
  133. result.setCode(Constants.interfaceException.INTERFACE_EXCEPTION.code);
  134. result.setMsg("发送请求异常,请检查url、参数的合法性!异常错误:" + e.getMessage());
  135. }finally{
  136. try{
  137. if(entity != null){
  138. EntityUtils.consume(entity);
  139. }
  140. if(response != null){
  141. response.close();
  142. }
  143. }catch(Exception e){
  144. }
  145. }
  146. return result;
  147. }
  148. public static <T extends BaseResult> T sendPostByJson(String url, Req req, Class<T> clazz) {
  149. Result<String> result = sendPostByJson(url, req);
  150. if (result.getCode() == 0) {
  151. Gson gson = new Gson();
  152. return gson.fromJson(result.getData(), clazz);
  153. }
  154. T t = null;
  155. try {
  156. t = clazz.newInstance();
  157. t.setErrorCode(result.getCode());
  158. t.setErrorMessage(result.getMsg());
  159. } catch (Exception e) {
  160. LOG.error("sendPostByJson error, details:", e);
  161. }
  162. return t;
  163. }
  164. public static void main(String[] args) throws Exception {
  165. Gson gson = new Gson();
  166. String token = "testToken";
  167. String nonce = "9890d0eb-5aa9-4f45-9a28-0b05fdfb2588";
  168. long timestamp = System.currentTimeMillis();
  169. String content =
  170. "4FE34659FB17F8AEB8971177F9FF04B581B83A0A6E5F5271C1BA41BD112C9F3C21C8E3AF0978FEB57323B5A903997327D65F7C1D1FF6F4308B720F8E52248223CC6E693CC3029B4A9A4784C21D4A064956C883CE64DE09486F053957827D4B8F2D10AAABB9083B806B5F6507887BF8F9";
  171. String deStr =
  172. SigUtils.decodeAES(
  173. "4FE34659FB17F8AEB8971177F9FF04B581B83A0A6E5F5271C1BA41BD112C9F3C21C8E3AF0978FEB57323B5A903997327D65F7C1D1FF6F4308B720F8E52248223CC6E693CC3029B4A9A4784C21D4A064956C883CE64DE09486F053957827D4B8F2D10AAABB9083B806B5F6507887BF8F9",
  174. "x45sdf3sd1231231232xs");
  175. System.out.println(deStr);
  176. String sig = SigUtils.getSHA1(token, "" + timestamp, nonce, content);
  177. Map<String, String> paramMap = new HashMap<String, String>();
  178. paramMap.put("nonce", nonce);
  179. paramMap.put("timeStamp", "" + timestamp);
  180. paramMap.put("content", content);
  181. paramMap.put("sig", sig);
  182. String jsonStr = gson.toJson(paramMap);
  183. System.out.println(jsonStr);
  184. HttpResponseMessageVO httpResponseMessage =
  185. sendPostByJson("http://localhost:8080/third-sys/parse/authorize", jsonStr);
  186. System.out.println(httpResponseMessage.getContent());
  187. }
  188. }