HttpHelper.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. package com.izouma.dingtalk.utils;
  2. import com.izouma.dingtalk.OApiException;
  3. import com.alibaba.fastjson.JSON;
  4. import com.alibaba.fastjson.JSONObject;
  5. import org.apache.commons.io.FileUtils;
  6. import org.apache.http.HttpEntity;
  7. import org.apache.http.client.config.RequestConfig;
  8. import org.apache.http.client.methods.CloseableHttpResponse;
  9. import org.apache.http.client.methods.HttpGet;
  10. import org.apache.http.client.methods.HttpPost;
  11. import org.apache.http.client.protocol.HttpClientContext;
  12. import org.apache.http.entity.ContentType;
  13. import org.apache.http.entity.StringEntity;
  14. import org.apache.http.entity.mime.MultipartEntityBuilder;
  15. import org.apache.http.entity.mime.content.FileBody;
  16. import org.apache.http.impl.client.CloseableHttpClient;
  17. import org.apache.http.impl.client.HttpClients;
  18. import org.apache.http.impl.client.RedirectLocations;
  19. import org.apache.http.protocol.BasicHttpContext;
  20. import org.apache.http.protocol.HttpContext;
  21. import org.apache.http.util.EntityUtils;
  22. import java.io.File;
  23. import java.io.IOException;
  24. import java.net.URI;
  25. /**
  26. * HTTP请求封装,建议直接使用sdk的API
  27. */
  28. public class HttpHelper {
  29. public static JSONObject httpGet(String url) throws OApiException{
  30. HttpGet httpGet = new HttpGet(url);
  31. CloseableHttpResponse response = null;
  32. CloseableHttpClient httpClient = HttpClients.createDefault();
  33. RequestConfig requestConfig = RequestConfig.custom().
  34. setSocketTimeout(2000).setConnectTimeout(2000).build();
  35. httpGet.setConfig(requestConfig);
  36. try {
  37. response = httpClient.execute(httpGet, new BasicHttpContext());
  38. if (response.getStatusLine().getStatusCode() != 200) {
  39. System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
  40. + ", url=" + url);
  41. return null;
  42. }
  43. HttpEntity entity = response.getEntity();
  44. if (entity != null) {
  45. String resultStr = EntityUtils.toString(entity, "utf-8");
  46. JSONObject result = JSON.parseObject(resultStr);
  47. if (result.getInteger("errcode") == 0) {
  48. return result;
  49. } else {
  50. System.out.println("request url=" + url + ",return value=");
  51. System.out.println(resultStr);
  52. int errCode = result.getInteger("errcode");
  53. String errMsg = result.getString("errmsg");
  54. throw new OApiException(errCode, errMsg);
  55. }
  56. }
  57. } catch (IOException e) {
  58. System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
  59. e.printStackTrace();
  60. } finally {
  61. if (response != null) try {
  62. response.close();
  63. } catch (IOException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. return null;
  68. }
  69. public static JSONObject httpPost(String url, Object data) throws OApiException {
  70. HttpPost httpPost = new HttpPost(url);
  71. CloseableHttpResponse response = null;
  72. CloseableHttpClient httpClient = HttpClients.createDefault();
  73. RequestConfig requestConfig = RequestConfig.custom().
  74. setSocketTimeout(2000).setConnectTimeout(2000).build();
  75. httpPost.setConfig(requestConfig);
  76. httpPost.addHeader("Content-Type", "application/json");
  77. try {
  78. StringEntity requestEntity = new StringEntity(JSON.toJSONString(data), "utf-8");
  79. httpPost.setEntity(requestEntity);
  80. response = httpClient.execute(httpPost, new BasicHttpContext());
  81. if (response.getStatusLine().getStatusCode() != 200) {
  82. System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
  83. + ", url=" + url);
  84. return null;
  85. }
  86. HttpEntity entity = response.getEntity();
  87. if (entity != null) {
  88. String resultStr = EntityUtils.toString(entity, "utf-8");
  89. JSONObject result = JSON.parseObject(resultStr);
  90. if (result.getInteger("errcode") == 0) {
  91. result.remove("errcode");
  92. result.remove("errmsg");
  93. return result;
  94. } else {
  95. System.out.println("request url=" + url + ",return value=");
  96. System.out.println(resultStr);
  97. int errCode = result.getInteger("errcode");
  98. String errMsg = result.getString("errmsg");
  99. throw new OApiException(errCode, errMsg);
  100. }
  101. }
  102. } catch (IOException e) {
  103. System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
  104. e.printStackTrace();
  105. } finally {
  106. if (response != null) try {
  107. response.close();
  108. } catch (IOException e) {
  109. e.printStackTrace();
  110. }
  111. }
  112. return null;
  113. }
  114. public static JSONObject uploadMedia(String url, File file) throws OApiException {
  115. HttpPost httpPost = new HttpPost(url);
  116. CloseableHttpResponse response = null;
  117. CloseableHttpClient httpClient = HttpClients.createDefault();
  118. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();
  119. httpPost.setConfig(requestConfig);
  120. HttpEntity requestEntity = MultipartEntityBuilder.create().addPart("media",
  121. new FileBody(file, ContentType.APPLICATION_OCTET_STREAM, file.getName())).build();
  122. httpPost.setEntity(requestEntity);
  123. try {
  124. response = httpClient.execute(httpPost, new BasicHttpContext());
  125. if (response.getStatusLine().getStatusCode() != 200) {
  126. System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
  127. + ", url=" + url);
  128. return null;
  129. }
  130. HttpEntity entity = response.getEntity();
  131. if (entity != null) {
  132. String resultStr = EntityUtils.toString(entity, "utf-8");
  133. JSONObject result = JSON.parseObject(resultStr);
  134. if (result.getInteger("errcode") == 0) {
  135. // 成功
  136. result.remove("errcode");
  137. result.remove("errmsg");
  138. return result;
  139. } else {
  140. System.out.println("request url=" + url + ",return value=");
  141. System.out.println(resultStr);
  142. int errCode = result.getInteger("errcode");
  143. String errMsg = result.getString("errmsg");
  144. throw new OApiException(errCode, errMsg);
  145. }
  146. }
  147. } catch (IOException e) {
  148. System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
  149. e.printStackTrace();
  150. } finally {
  151. if (response != null) try {
  152. response.close();
  153. } catch (IOException e) {
  154. e.printStackTrace();
  155. }
  156. }
  157. return null;
  158. }
  159. public static JSONObject downloadMedia(String url, String fileDir) throws OApiException {
  160. HttpGet httpGet = new HttpGet(url);
  161. CloseableHttpResponse response = null;
  162. CloseableHttpClient httpClient = HttpClients.createDefault();
  163. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();
  164. httpGet.setConfig(requestConfig);
  165. try {
  166. HttpContext localContext = new BasicHttpContext();
  167. response = httpClient.execute(httpGet, localContext);
  168. RedirectLocations locations = (RedirectLocations) localContext.getAttribute(HttpClientContext.REDIRECT_LOCATIONS);
  169. if (locations != null) {
  170. URI downloadUrl = locations.getAll().get(0);
  171. String filename = downloadUrl.toURL().getFile();
  172. System.out.println("downloadUrl=" + downloadUrl);
  173. File downloadFile = new File(fileDir + File.separator + filename);
  174. FileUtils.writeByteArrayToFile(downloadFile, EntityUtils.toByteArray(response.getEntity()));
  175. JSONObject obj = new JSONObject();
  176. obj.put("downloadFilePath", downloadFile.getAbsolutePath());
  177. obj.put("httpcode", response.getStatusLine().getStatusCode());
  178. return obj;
  179. } else {
  180. if (response.getStatusLine().getStatusCode() != 200) {
  181. System.out.println("request url failed, http code=" + response.getStatusLine().getStatusCode()
  182. + ", url=" + url);
  183. return null;
  184. }
  185. HttpEntity entity = response.getEntity();
  186. if (entity != null) {
  187. String resultStr = EntityUtils.toString(entity, "utf-8");
  188. JSONObject result = JSON.parseObject(resultStr);
  189. if (result.getInteger("errcode") == 0) {
  190. // 成功
  191. result.remove("errcode");
  192. result.remove("errmsg");
  193. return result;
  194. } else {
  195. System.out.println("request url=" + url + ",return value=");
  196. System.out.println(resultStr);
  197. int errCode = result.getInteger("errcode");
  198. String errMsg = result.getString("errmsg");
  199. throw new OApiException(errCode, errMsg);
  200. }
  201. }
  202. }
  203. } catch (IOException e) {
  204. System.out.println("request url=" + url + ", exception, msg=" + e.getMessage());
  205. e.printStackTrace();
  206. } finally {
  207. if (response != null) try {
  208. response.close();
  209. } catch (IOException e) {
  210. e.printStackTrace();
  211. }
  212. }
  213. return null;
  214. }
  215. }