1. 程式人生 > 實用技巧 >Java HttpsURLConnection 傳送 Https請求

Java HttpsURLConnection 傳送 Https請求

  1 package com.xxxx;
  2 
  3 import java.io.ByteArrayInputStream;
  4 import java.io.ByteArrayOutputStream;
  5 import java.io.IOException;
  6 import java.io.InputStream;
  7 import java.io.OutputStream;
  8 import java.net.URL;
  9 import java.security.KeyManagementException;
 10 import java.security.NoSuchAlgorithmException;
11 import java.security.SecureRandom; 12 import java.security.cert.CertificateException; 13 import java.security.cert.X509Certificate; 14 import java.util.Map; 15 16 import javax.net.ssl.HostnameVerifier; 17 import javax.net.ssl.HttpsURLConnection; 18 import javax.net.ssl.KeyManager; 19 import
javax.net.ssl.SSLContext; 20 import javax.net.ssl.SSLSession; 21 import javax.net.ssl.SSLSocketFactory; 22 import javax.net.ssl.TrustManager; 23 import javax.net.ssl.X509TrustManager; 24 25 import org.apache.log4j.Logger; 26 27 /** 28 * Https 請求工具類 29 * 30 * @Author 31 * @Date 2020-7-13 13:58:15
32 */ 33 public class HongliHttpsUtil { 34 35 private static Logger log = Logger.getLogger(HongLiQPSyncClient.class); 36 37 /** 38 * 傳送 https get請求 39 * 40 * @param uri 41 * @return 42 * @throws IOException 43 * @Author 44 * @Date 2020-7-13 15:14:12 45 */ 46 public static String doGet(String uri, String token, Map<String,String> params){ 47 HttpsURLConnection httpsConn; 48 try { 49 httpsConn = getHttpsURLConnection(uri + setUrlParams(params), "GET"); 50 httpsConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//text/plain 51 httpsConn.setRequestProperty("ACCESS_TOKEN",token); 52 byte[] bytes = getBytesFromStream(httpsConn.getInputStream()); 53 return new String(bytes); 54 } catch (IOException e) { 55 // TODO Auto-generated catch block 56 e.printStackTrace(); 57 } 58 return null; 59 } 60 61 /** 62 * 傳送 https post請求 63 * 64 * @param uri 65 * @param data 66 * @return 67 * @throws IOException 68 * @Author 69 * @Date 2020-7-13 15:14:35 70 */ 71 public static String doPost(String uri, String data, Map<String,String> params){ 72 HttpsURLConnection httpsConn; 73 try { 74 httpsConn = getHttpsURLConnection(uri + setUrlParams(params), "POST"); 75 httpsConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//text/plain 76 setBytesToStream(httpsConn.getOutputStream(),data.getBytes()); 77 byte[] bytes = getBytesFromStream(httpsConn.getInputStream()); 78 return new String(bytes); 79 } catch (IOException e) { 80 e.printStackTrace(); 81 } 82 83 return null; 84 } 85 86 private static String setUrlParams(Map<String,String> params) { 87 StringBuilder sb = new StringBuilder("?"); 88 int i = 0; 89 for(Map.Entry<String, String> param: params.entrySet()) { 90 String paramName = param.getKey(); 91 String paramValue = param.getValue(); 92 log.info(paramName + ": " + paramValue); 93 sb.append(paramName + "=" + paramValue); 94 if (i<params.size()-1) { 95 sb.append("&"); 96 } 97 i++; 98 } 99 return new String(sb); 100 } 101 102 /** 103 * 獲取HttpsURLConnection連結 104 * 105 * @param uri 請求地址 106 * @param method 請求方法(POST GET) 107 * @return 108 * @throws IOException 109 * @Author 110 * @Date 2020-7-13 15:16:42 111 */ 112 private static HttpsURLConnection getHttpsURLConnection(String uri, String method) throws IOException { 113 SSLContext ctx = null; 114 try { 115 ctx = SSLContext.getInstance("TLS");//TLS SSLv3 116 ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() }, new SecureRandom()); 117 } catch (KeyManagementException e) { 118 e.printStackTrace(); 119 } catch (NoSuchAlgorithmException e) { 120 e.printStackTrace(); 121 } 122 SSLSocketFactory ssf = ctx.getSocketFactory(); 123 124 URL url = new URL(uri); 125 HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection(); 126 httpsConn.setSSLSocketFactory(ssf); 127 httpsConn.setHostnameVerifier(new HostnameVerifier() { 128 @Override 129 public boolean verify(String arg0, SSLSession arg1) { 130 return true; 131 } 132 }); 133 httpsConn.setRequestMethod(method); 134 httpsConn.setDoInput(true); 135 httpsConn.setDoOutput(true); 136 httpsConn.setRequestProperty("Accept","*/*"); 137 httpsConn.setRequestProperty("Connection", "keep-alive"); 138 httpsConn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"); 139 return httpsConn; 140 } 141 142 /** 143 * 從請求的輸入流中獲取資料並返回位元組陣列 144 * 145 * @param is 146 * @return 147 * @throws IOException 148 * @Author 149 * @Date 2020-7-13 15:15:45 150 */ 151 private static byte[] getBytesFromStream(InputStream is) throws IOException { 152 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 153 byte[] kb = new byte[1024]; 154 int len; 155 while ((len = is.read(kb)) != -1) { 156 baos.write(kb, 0, len); 157 } 158 byte[] bytes = baos.toByteArray(); 159 baos.close(); 160 is.close(); 161 return bytes; 162 } 163 164 /** 165 * post請求 傳送引數 166 * 167 * @param os 168 * @param bytes 169 * @throws IOException 170 * @Author 171 * @Date 2020-7-13 15:15:02 172 */ 173 private static void setBytesToStream(OutputStream os, byte[] bytes) throws IOException { 174 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); 175 byte[] kb = new byte[1024]; 176 int len; 177 while ((len = bais.read(kb)) != -1) { 178 os.write(kb, 0, len); 179 } 180 os.flush(); 181 os.close(); 182 bais.close(); 183 } 184 185 } 186 187 final class DefaultTrustManager implements X509TrustManager { 188 189 @Override 190 public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 191 } 192 193 @Override 194 public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException { 195 } 196 197 @Override 198 public X509Certificate[] getAcceptedIssuers() { 199 return null; 200 } 201 202 }

原文連結:https://blog.csdn.net/Zjruana/article/details/81488866