HttpsRequest.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. package com.steerinfo.util;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import java.io.*;
  6. import java.net.URL;
  7. import java.util.HashMap;
  8. import java.util.Map;
  9. import javax.net.ssl.HttpsURLConnection;
  10. import javax.net.ssl.SSLContext;
  11. import javax.net.ssl.SSLSocketFactory;
  12. import javax.net.ssl.TrustManager;
  13. /**
  14. * @author Bourne.Cao
  15. * @date 2021-12-30 9:34
  16. */
  17. public class HttpsRequest {
  18. /**
  19. * 向指定 URL 发送POST方法的请求
  20. *
  21. * @param url
  22. * 发送请求的 URL
  23. * @param param
  24. * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  25. * @return 所代表远程资源的响应结果
  26. */
  27. public static String sendPost(String url, String param) {
  28. PrintWriter out = null;
  29. BufferedReader in = null;
  30. String result = "";
  31. try {
  32. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  33. TrustManager[] tm = { new MyX509TrustManager() };
  34. SSLContext sslContext = SSLContext.getInstance("SSL");
  35. sslContext.init(null, tm, new java.security.SecureRandom());
  36. // 从上述SSLContext对象中得到SSLSocketFactory对象
  37. SSLSocketFactory ssf = sslContext.getSocketFactory();
  38. // 打开和URL之间的连接
  39. URL realUrl = new URL(url);
  40. HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
  41. conn.setSSLSocketFactory(ssf);
  42. // 设置通用的请求属性
  43. conn.setRequestProperty("accept", "*/*");
  44. conn.setRequestProperty("connection", "Keep-Alive");
  45. conn.setRequestProperty("content-Type", "application/json");
  46. conn.setRequestProperty("user-agent",
  47. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  48. // 发送POST请求必须设置如下两行
  49. conn.setDoOutput(true);
  50. conn.setDoInput(true);
  51. // 获取URLConnection对象对应的输出流
  52. out = new PrintWriter(conn.getOutputStream());
  53. // 发送请求参数
  54. out.print(param);
  55. // flush输出流的缓冲
  56. out.flush();
  57. // 定义BufferedReader输入流来读取URL的响应
  58. in = new BufferedReader(
  59. new InputStreamReader(conn.getInputStream()));
  60. String line;
  61. while ((line = in.readLine()) != null) {
  62. result += line;
  63. }
  64. System.out.println("-----result-----"+result);
  65. } catch (Exception e) {
  66. System.out.println("发送 POST 请求出现异常!"+e);
  67. e.printStackTrace();
  68. }
  69. //使用finally块来关闭输出流、输入流
  70. finally{
  71. try{
  72. if(out!=null){
  73. out.close();
  74. }
  75. if(in!=null){
  76. in.close();
  77. }
  78. }
  79. catch(IOException ex){
  80. ex.printStackTrace();
  81. }
  82. }
  83. return result;
  84. }
  85. /**
  86. * 向指定 URL 发送POST方法的请求
  87. *
  88. * @param url
  89. * 发送请求的 URL
  90. * @param params
  91. * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  92. * @return 所代表远程资源的响应结果
  93. */
  94. public static String sendPost(String url, Map<String, String> params) {
  95. OutputStreamWriter out = null;
  96. BufferedReader in = null;
  97. StringBuilder result = new StringBuilder();
  98. try {
  99. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  100. TrustManager[] tm = { new MyX509TrustManager() };
  101. SSLContext sslContext = SSLContext.getInstance("SSL");
  102. sslContext.init(null, tm, new java.security.SecureRandom());
  103. // 从上述SSLContext对象中得到SSLSocketFactory对象
  104. SSLSocketFactory ssf = sslContext.getSocketFactory();
  105. // 打开和URL之间的连接
  106. URL realUrl = new URL(url);
  107. HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
  108. conn.setSSLSocketFactory(ssf);
  109. // POST方法
  110. conn.setRequestMethod("POST");
  111. // 发送POST请求必须设置如下两行
  112. conn.setDoOutput(true);
  113. conn.setDoInput(true);
  114. // 设置通用的请求属性
  115. conn.setRequestProperty("accept", "*/*");
  116. conn.setRequestProperty("connection", "Keep-Alive");
  117. conn.setRequestProperty("user-agent",
  118. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  119. conn.setRequestProperty("Content-Type",
  120. "application/x-www-form-urlencoded");
  121. conn.connect();
  122. // 获取URLConnection对象对应的输出流
  123. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  124. // 发送请求参数
  125. if (params != null) {
  126. StringBuilder param = new StringBuilder();
  127. for (Map.Entry<String, String> entry : params.entrySet()) {
  128. if (param.length() > 0) {
  129. param.append("&");
  130. }
  131. param.append(entry.getKey());
  132. param.append("=");
  133. param.append(entry.getValue());
  134. // System.out.println(entry.getKey()+":"+entry.getValue());
  135. }
  136. System.out.println("param:" + param.toString());
  137. out.write(param.toString());
  138. }
  139. // flush输出流的缓冲
  140. out.flush();
  141. // 定义BufferedReader输入流来读取URL的响应
  142. in = new BufferedReader(new InputStreamReader(
  143. conn.getInputStream(), "UTF-8"));
  144. String line;
  145. while ((line = in.readLine()) != null) {
  146. result.append(line);
  147. }
  148. System.out.println("-----result-----"+result);
  149. } catch (Exception e) {
  150. System.out.println("发送 POST 请求出现异常!"+e);
  151. e.printStackTrace();
  152. }
  153. //使用finally块来关闭输出流、输入流
  154. finally{
  155. try{
  156. if(out!=null){
  157. out.close();
  158. }
  159. if(in!=null){
  160. in.close();
  161. }
  162. }
  163. catch(IOException ex){
  164. ex.printStackTrace();
  165. }
  166. }
  167. return result.toString();
  168. }
  169. /**
  170. * 向指定 URL 发送POST方法的请求
  171. *
  172. * @param url
  173. * 发送请求的 URL
  174. * @param params
  175. * 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
  176. * @return 所代表远程资源的响应结果
  177. */
  178. public static String sendPost(String url, Map<String, String> params, String token) {
  179. OutputStreamWriter out = null;
  180. BufferedReader in = null;
  181. StringBuilder result = new StringBuilder();
  182. try {
  183. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  184. TrustManager[] tm = { new MyX509TrustManager() };
  185. SSLContext sslContext = SSLContext.getInstance("SSL");
  186. sslContext.init(null, tm, new java.security.SecureRandom());
  187. // 从上述SSLContext对象中得到SSLSocketFactory对象
  188. SSLSocketFactory ssf = sslContext.getSocketFactory();
  189. // 打开和URL之间的连接
  190. URL realUrl = new URL(url);
  191. HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
  192. conn.setSSLSocketFactory(ssf);
  193. // POST方法
  194. conn.setRequestMethod("POST");
  195. // 发送POST请求必须设置如下两行
  196. conn.setDoOutput(true);
  197. conn.setDoInput(true);
  198. // 设置通用的请求属性
  199. conn.setRequestProperty("accept", "*/*");
  200. conn.setRequestProperty("connection", "Keep-Alive");
  201. conn.setRequestProperty("user-agent",
  202. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  203. conn.setRequestProperty("Content-Type",
  204. "application/x-www-form-urlencoded");
  205. conn.setRequestProperty("authorization",
  206. "Bearer " + token);
  207. conn.connect();
  208. // 获取URLConnection对象对应的输出流
  209. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  210. // 发送请求参数
  211. if (params != null) {
  212. StringBuilder param = new StringBuilder();
  213. for (Map.Entry<String, String> entry : params.entrySet()) {
  214. if (param.length() > 0) {
  215. param.append("&");
  216. }
  217. param.append(entry.getKey());
  218. param.append("=");
  219. param.append(entry.getValue());
  220. // System.out.println(entry.getKey()+":"+entry.getValue());
  221. }
  222. System.out.println("param:" + param.toString());
  223. out.write(param.toString());
  224. }
  225. // flush输出流的缓冲
  226. out.flush();
  227. // 定义BufferedReader输入流来读取URL的响应
  228. in = new BufferedReader(new InputStreamReader(
  229. conn.getInputStream(), "UTF-8"));
  230. String line;
  231. while ((line = in.readLine()) != null) {
  232. result.append(line);
  233. }
  234. System.out.println("-----result-----"+result);
  235. } catch (Exception e) {
  236. System.out.println("发送 POST 请求出现异常!"+e);
  237. e.printStackTrace();
  238. }
  239. //使用finally块来关闭输出流、输入流
  240. finally{
  241. try{
  242. if(out!=null){
  243. out.close();
  244. }
  245. if(in!=null){
  246. in.close();
  247. }
  248. }
  249. catch(IOException ex){
  250. ex.printStackTrace();
  251. }
  252. }
  253. return result.toString();
  254. }
  255. /**
  256. * 向指定 URL 发送DELETE方法的请求
  257. *
  258. * @param url
  259. * 发送请求的 URL
  260. * @return 所代表远程资源的响应结果
  261. */
  262. public static String sendDelete(String url, String token) {
  263. OutputStreamWriter out = null;
  264. BufferedReader in = null;
  265. StringBuilder result = new StringBuilder();
  266. try {
  267. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  268. TrustManager[] tm = { new MyX509TrustManager() };
  269. SSLContext sslContext = SSLContext.getInstance("SSL");
  270. sslContext.init(null, tm, new java.security.SecureRandom());
  271. // 从上述SSLContext对象中得到SSLSocketFactory对象
  272. SSLSocketFactory ssf = sslContext.getSocketFactory();
  273. // 打开和URL之间的连接
  274. URL realUrl = new URL(url);
  275. HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
  276. conn.setSSLSocketFactory(ssf);
  277. // POST方法
  278. conn.setRequestMethod("DELETE");
  279. // 发送POST请求必须设置如下两行
  280. conn.setDoOutput(true);
  281. conn.setDoInput(true);
  282. // 设置通用的请求属性
  283. conn.setRequestProperty("accept", "*/*");
  284. conn.setRequestProperty("connection", "Keep-Alive");
  285. conn.setRequestProperty("user-agent",
  286. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  287. conn.setRequestProperty("Content-Type",
  288. "application/x-www-form-urlencoded");
  289. conn.setRequestProperty("authorization",
  290. "Bearer " + token);
  291. conn.connect();
  292. // 获取URLConnection对象对应的输出流
  293. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  294. // flush输出流的缓冲
  295. out.flush();
  296. // 定义BufferedReader输入流来读取URL的响应
  297. in = new BufferedReader(new InputStreamReader(
  298. conn.getInputStream(), "UTF-8"));
  299. String line;
  300. while ((line = in.readLine()) != null) {
  301. result.append(line);
  302. }
  303. System.out.println("-----result-----"+result);
  304. } catch (Exception e) {
  305. System.out.println("发送 DELETE 请求出现异常!"+e);
  306. e.printStackTrace();
  307. }
  308. //使用finally块来关闭输出流、输入流
  309. finally{
  310. try{
  311. if(out!=null){
  312. out.close();
  313. }
  314. if(in!=null){
  315. in.close();
  316. }
  317. }
  318. catch(IOException ex){
  319. ex.printStackTrace();
  320. }
  321. }
  322. return result.toString();
  323. }
  324. /**
  325. * 向指定 URL 发送PUT方法的请求
  326. *
  327. * @param url
  328. * 发送请求的 URL
  329. * @return 所代表远程资源的响应结果
  330. */
  331. public static String sendPut(String url, Map<String, String> params, String token) {
  332. OutputStreamWriter out = null;
  333. BufferedReader in = null;
  334. StringBuilder result = new StringBuilder();
  335. try {
  336. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  337. TrustManager[] tm = { new MyX509TrustManager() };
  338. SSLContext sslContext = SSLContext.getInstance("SSL");
  339. sslContext.init(null, tm, new java.security.SecureRandom());
  340. // 从上述SSLContext对象中得到SSLSocketFactory对象
  341. SSLSocketFactory ssf = sslContext.getSocketFactory();
  342. // 打开和URL之间的连接
  343. URL realUrl = new URL(url);
  344. HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
  345. conn.setSSLSocketFactory(ssf);
  346. // POST方法
  347. conn.setRequestMethod("PUT");
  348. // 发送POST请求必须设置如下两行
  349. conn.setDoOutput(true);
  350. conn.setDoInput(true);
  351. // 设置通用的请求属性
  352. conn.setRequestProperty("accept", "*/*");
  353. conn.setRequestProperty("connection", "Keep-Alive");
  354. conn.setRequestProperty("user-agent",
  355. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  356. conn.setRequestProperty("Content-Type",
  357. "application/json;charset=UTF-8");
  358. conn.setRequestProperty("authorization",
  359. "Bearer " + token);
  360. conn.connect();
  361. // 获取URLConnection对象对应的输出流
  362. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  363. // 发送json请求参数
  364. String json = JSON.toJSONString(params);
  365. //json = java.net.URLEncoder.encode(json, "utf-8");
  366. out.write(json);
  367. // flush输出流的缓冲
  368. out.flush();
  369. // 定义BufferedReader输入流来读取URL的响应
  370. in = new BufferedReader(new InputStreamReader(
  371. conn.getInputStream(), "UTF-8"));
  372. String line;
  373. while ((line = in.readLine()) != null) {
  374. result.append(line);
  375. }
  376. System.out.println("-----result-----"+result);
  377. } catch (Exception e) {
  378. System.out.println("发送 PUT 请求出现异常!"+e);
  379. e.printStackTrace();
  380. }
  381. //使用finally块来关闭输出流、输入流
  382. finally{
  383. try{
  384. if(out!=null){
  385. out.close();
  386. }
  387. if(in!=null){
  388. in.close();
  389. }
  390. }
  391. catch(IOException ex){
  392. ex.printStackTrace();
  393. }
  394. }
  395. return result.toString();
  396. }
  397. /**
  398. * 向指定 URL 发送GET方法的请求
  399. *
  400. * @param url
  401. * 发送请求的 URL
  402. * @return 所代表远程资源的响应结果
  403. */
  404. public static String sendGET(String url, String token) {
  405. OutputStreamWriter out = null;
  406. BufferedReader in = null;
  407. StringBuilder result = new StringBuilder();
  408. try {
  409. // 创建SSLContext对象,并使用我们指定的信任管理器初始化
  410. TrustManager[] tm = { new MyX509TrustManager() };
  411. SSLContext sslContext = SSLContext.getInstance("SSL");
  412. sslContext.init(null, tm, new java.security.SecureRandom());
  413. // 从上述SSLContext对象中得到SSLSocketFactory对象
  414. SSLSocketFactory ssf = sslContext.getSocketFactory();
  415. // 打开和URL之间的连接
  416. URL realUrl = new URL(url);
  417. HttpsURLConnection conn = (HttpsURLConnection) realUrl.openConnection();
  418. conn.setSSLSocketFactory(ssf);
  419. // POST方法
  420. conn.setRequestMethod("GET");
  421. // 发送POST请求必须设置如下两行
  422. conn.setDoOutput(true);
  423. conn.setDoInput(true);
  424. // 设置通用的请求属性
  425. conn.setRequestProperty("accept", "*/*");
  426. conn.setRequestProperty("connection", "Keep-Alive");
  427. conn.setRequestProperty("user-agent",
  428. "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  429. conn.setRequestProperty("Content-Type",
  430. "application/json;charset=UTF-8");
  431. conn.setRequestProperty("authorization",
  432. "Bearer " + token);
  433. conn.connect();
  434. // 获取URLConnection对象对应的输出流
  435. out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
  436. // flush输出流的缓冲
  437. out.flush();
  438. // 定义BufferedReader输入流来读取URL的响应
  439. in = new BufferedReader(new InputStreamReader(
  440. conn.getInputStream(), "UTF-8"));
  441. String line;
  442. while ((line = in.readLine()) != null) {
  443. result.append(line);
  444. }
  445. System.out.println("-----result-----"+result);
  446. } catch (Exception e) {
  447. System.out.println("发送 GET 请求出现异常!"+e);
  448. e.printStackTrace();
  449. }
  450. //使用finally块来关闭输出流、输入流
  451. finally{
  452. try{
  453. if(out!=null){
  454. out.close();
  455. }
  456. if(in!=null){
  457. in.close();
  458. }
  459. }
  460. catch(IOException ex){
  461. ex.printStackTrace();
  462. }
  463. }
  464. return result.toString();
  465. }
  466. }