java jdk原生的http请求工具类


  1 package com.base;
  2 import java.io.IOException;
  3 import java.io.InputStream;
  4 import java.io.InputStreamReader;
  5 import java.io.OutputStream;
  6 import java.io.Reader;
  7 import java.net.HttpURLConnection;
  8 import java.net.SocketTimeoutException;
  9 import java.net.URL;
 10 import java.net.URLEncoder;
 11 import java.security.SecureRandom;
 12 import java.security.cert.CertificateException;
 13 import java.security.cert.X509Certificate;
 14 import java.util.Map;
 15 import java.util.Set;
 16 
 17 import javax.net.ssl.HostnameVerifier;
 18 import javax.net.ssl.HttpsURLConnection;
 19 import javax.net.ssl.KeyManager;
 20 import javax.net.ssl.SSLContext;
 21 import javax.net.ssl.SSLSession;
 22 import javax.net.ssl.TrustManager;
 23 import javax.net.ssl.X509TrustManager;
 24 
 25 /**
 26  * 
 27  * @ClassName:  HttpUtils   
 28  * @Description:http请求工具类
 29  * @author: zhouyy
 30  * @date:   2019年10月14日 下午3:50:34   
 31  *
 32  */
 33 public class HttpUtils {
 34     private static final String CTYPE_FORM = "application/x-www-form-urlencoded;charset=utf-8";
 35     private static final String CTYPE_JSON = "application/json; charset=utf-8";
 36     private static final String charset = "utf-8";
 37 
 38     private static HttpUtils instance = null;
 39 
 40     public static HttpUtils getInstance() {
 41         if (instance == null) {
 42             return new HttpUtils();
 43         }
 44         return instance;
 45     }
 46 
 47     
 48     public static void main(String[] args) throws SocketTimeoutException, IOException {
 49         String resp = getInstance().postJson("http://localhost:8080/test/test", "{\"custCmonId\":\"12345678\",\"custNo\":\"111\",\"custNo111\":\"706923\"}");
 50         System.out.println(resp);
 51     }
 52     
 53     private class DefaultTrustManager implements X509TrustManager {
 54         public X509Certificate[] getAcceptedIssuers() {
 55             return null;
 56         }
 57 
 58         public void checkClientTrusted(X509Certificate[] chain, String authType)
 59                 throws CertificateException {
 60         }
 61 
 62         public void checkServerTrusted(X509Certificate[] chain, String authType)
 63                 throws CertificateException {
 64         }
 65     }
 66 
 67     /**
 68      * 以application/json; charset=utf-8方式传输
 69      * 
 70      * @param url
 71      * @param requestContent
 72      * @return
 73      * @throws SocketTimeoutException
 74      * @throws IOException
 75      */
 76     public String postJson(String url, String jsonContent)
 77             throws SocketTimeoutException, IOException {
 78         return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,
 79                 null);
 80     }
 81 
 82     /**
 83      * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
 84      * 
 85      * @param url
 86      * @param requestContent
 87      * @return
 88      * @throws SocketTimeoutException
 89      * @throws IOException
 90      */
 91     public String postForm(String url) throws SocketTimeoutException,
 92             IOException {
 93         return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);
 94     }
 95 
 96     /**
 97      * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
 98      * 
 99      * @param url
100      * @param requestContent
101      * @return
102      * @throws SocketTimeoutException
103      * @throws IOException
104      */
105     public String postForm(String url, Map params)
106             throws SocketTimeoutException, IOException {
107         return doRequest("POST", url, buildQuery(params), 15000, 15000,
108                 CTYPE_FORM, null);
109     }
110 
111     /**
112      * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
113      * 
114      * @param url
115      * @param requestContent
116      * @return
117      * @throws SocketTimeoutException
118      * @throws IOException
119      */
120     public String getForm(String url) throws SocketTimeoutException,
121             IOException {
122         return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);
123     }
124 
125     /**
126      * POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
127      * 
128      * @param url
129      * @param requestContent
130      * @return
131      * @throws SocketTimeoutException
132      * @throws IOException
133      */
134     public String getForm(String url, Map params)
135             throws SocketTimeoutException, IOException {
136         return doRequest("GET", url, buildQuery(params), 15000, 15000,
137                 CTYPE_FORM, null);
138     }
139 
140     /**
141      * 
142      * 

@Description:

143 * @Title doRequest 144 * @author zhouyy 145 * @param method 请求的method post/get 146 * @param url 请求url 147 * @param requestContent 请求参数 148 * @param connectTimeout 请求超时 149 * @param readTimeout 响应超时 150 * @param ctype 请求格式 xml/json等等 151 * @param headerMap 请求header中要封装的参数 152 * @return 153 * @throws SocketTimeoutException 154 * @throws IOException 155 * @date: 2019年10月14日 下午3:47:35 156 */ 157 private String doRequest(String method, String url, String requestContent, 158 int connectTimeout, int readTimeout, String ctype, 159 Map headerMap) throws SocketTimeoutException, 160 IOException { 161 HttpURLConnection conn = null; 162 OutputStream out = null; 163 String rsp = null; 164 try { 165 conn = getConnection(new URL(url), method, ctype, headerMap); 166 conn.setConnectTimeout(connectTimeout); 167 conn.setReadTimeout(readTimeout); 168 169 if(requestContent != null && requestContent.trim().length() >0){ 170 out = conn.getOutputStream(); 171 out.write(requestContent.getBytes(charset)); 172 } 173 174 rsp = getResponseAsString(conn); 175 } finally { 176 if (out != null) { 177 out.close(); 178 } 179 if (conn != null) { 180 conn.disconnect(); 181 } 182 conn = null; 183 } 184 return rsp; 185 } 186 187 private HttpURLConnection getConnection(URL url, String method, 188 String ctype, Map headerMap) throws IOException { 189 HttpURLConnection conn; 190 if ("https".equals(url.getProtocol())) { 191 SSLContext ctx; 192 try { 193 ctx = SSLContext.getInstance("TLS"); 194 ctx.init(new KeyManager[0], 195 new TrustManager[] { new DefaultTrustManager() }, 196 new SecureRandom()); 197 } catch (Exception e) { 198 throw new IOException(e); 199 } 200 HttpsURLConnection connHttps = (HttpsURLConnection) url 201 .openConnection(); 202 connHttps.setSSLSocketFactory(ctx.getSocketFactory()); 203 connHttps.setHostnameVerifier(new HostnameVerifier() { 204 public boolean verify(String hostname, SSLSession session) { 205 return true; 206 } 207 }); 208 conn = connHttps; 209 } else { 210 conn = (HttpURLConnection) url.openConnection(); 211 } 212 conn.setRequestMethod(method); 213 conn.setDoInput(true); 214 conn.setDoOutput(true); 215 conn.setRequestProperty("Accept", 216 "text/xml,text/javascript,text/html,application/json"); 217 conn.setRequestProperty("Content-Type", ctype); 218 if (headerMap != null) { 219 for (Map.Entry entry : headerMap.entrySet()) { 220 conn.setRequestProperty(entry.getKey(), entry.getValue()); 221 } 222 } 223 return conn; 224 } 225 226 private String getResponseAsString(HttpURLConnection conn) 227 throws IOException { 228 InputStream es = conn.getErrorStream(); 229 if (es == null) { 230 return getStreamAsString(conn.getInputStream(), charset, conn); 231 } else { 232 String msg = getStreamAsString(es, charset, conn); 233 if (msg != null && msg.trim().length() >0) { 234 throw new IOException(conn.getResponseCode() + ":" 235 + conn.getResponseMessage()); 236 } else { 237 return msg; 238 } 239 } 240 } 241 242 private String getStreamAsString(InputStream stream, String charset, 243 HttpURLConnection conn) throws IOException { 244 try { 245 Reader reader = new InputStreamReader(stream, charset); 246 247 StringBuilder response = new StringBuilder(); 248 final char[] buff = new char[1024]; 249 int read = 0; 250 while ((read = reader.read(buff)) > 0) { 251 response.append(buff, 0, read); 252 } 253 254 return response.toString(); 255 } finally { 256 if (stream != null) { 257 stream.close(); 258 } 259 } 260 } 261 262 private String buildQuery(Map params) throws IOException { 263 if (params == null || params.isEmpty()) { 264 return ""; 265 } 266 267 StringBuilder query = new StringBuilder(); 268 Set> entries = params.entrySet(); 269 boolean hasParam = false; 270 271 for (Map.Entry entry : entries) { 272 String name = entry.getKey(); 273 String value = entry.getValue(); 274 if (hasParam) { 275 query.append("&"); 276 } else { 277 hasParam = true; 278 } 279 query.append(name).append("=") 280 .append(URLEncoder.encode(value, charset)); 281 } 282 return query.toString(); 283 } 284 }

非原著,借鉴大神!

https://www.cnblogs.com/jpfss/p/10063666.html