New file |
| | |
| | | package com.xcong.excoin.modules.member.service; |
| | | |
| | | /** |
| | | * @author: DengJiong |
| | | * @date: 2018-05-09 18:43 |
| | | * @description: |
| | | */ |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | import javax.net.ssl.*; |
| | | import java.io.*; |
| | | import java.net.HttpURLConnection; |
| | | import java.net.URL; |
| | | import java.net.URLEncoder; |
| | | import java.security.cert.CertificateException; |
| | | import java.security.cert.X509Certificate; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * http 工具类 |
| | | * |
| | | * @author cloud cloud |
| | | * @create 2017/10/18 |
| | | **/ |
| | | public class HttpUtil { |
| | | |
| | | private static final String CHARSET = "UTF-8"; |
| | | private static final String HTTP_POST = "POST"; |
| | | private static final String HTTP_GET = "GET"; |
| | | |
| | | private static final String HTTP_PUT = "PUT"; |
| | | |
| | | /** |
| | | * Send GET request |
| | | */ |
| | | public static String get(String url, Map<String, String> queryParas, Map<String, String> headers) { |
| | | HttpURLConnection conn = null; |
| | | try { |
| | | conn = getHttpConnection(buildUrlWithQueryString(url, queryParas), HTTP_GET, headers); |
| | | conn.connect(); |
| | | return readResponseString(conn); |
| | | } |
| | | catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | finally { |
| | | if (conn != null) { |
| | | conn.disconnect(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static String get(String url, Map<String, String> queryParas) { |
| | | return get(url, queryParas, null); |
| | | } |
| | | |
| | | public static String get(String url) { |
| | | return get(url, null, null); |
| | | } |
| | | |
| | | public static String jsonGet(String url,Map<String,String> params){ |
| | | Map<String,String> headers = new HashMap<>(); |
| | | headers.put("Content-Type","application/json"); |
| | | return get(url,params,headers); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * Send POST request |
| | | */ |
| | | public static String post(String url, Map<String, String> queryParas, String data, Map<String, String> headers) { |
| | | HttpURLConnection conn = null; |
| | | try { |
| | | conn = getHttpConnection(buildUrlWithQueryString(url, queryParas), HTTP_POST, headers); |
| | | conn.connect(); |
| | | OutputStream out = conn.getOutputStream(); |
| | | out.write(data.getBytes(CHARSET)); |
| | | out.flush(); |
| | | out.close(); |
| | | return readResponseString(conn); |
| | | } |
| | | catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | finally { |
| | | if (conn != null) { |
| | | conn.disconnect(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public static String post(String url, Map<String, String> queryParas, String data) { |
| | | return post(url, queryParas, data, null); |
| | | } |
| | | |
| | | public static String post(String url, String data, Map<String, String> headers) { |
| | | return post(url, null, data, headers); |
| | | } |
| | | |
| | | public static String post(String url, String data) { |
| | | return post(url, null, data, null); |
| | | } |
| | | |
| | | public static String jsonPost(String url,String data){ |
| | | Map<String,String> headers = new HashMap<>(); |
| | | headers.put("Content-Type","application/json"); |
| | | return post(url,null,data,headers); |
| | | } |
| | | |
| | | public static String jsonPost(String url,Map<String,String>headers,String data){ |
| | | if(headers == null){ |
| | | headers = new HashMap<>(); |
| | | } |
| | | headers.put("Content-Type","application/json"); |
| | | return post(url,null,data,headers); |
| | | } |
| | | |
| | | /** |
| | | * Send POST request |
| | | */ |
| | | public static String put(String url, Map<String, String> queryParas, String data, Map<String, String> headers) { |
| | | HttpURLConnection conn = null; |
| | | try { |
| | | conn = getHttpConnection(buildUrlWithQueryString(url, queryParas), HTTP_PUT, headers); |
| | | conn.connect(); |
| | | OutputStream out = conn.getOutputStream(); |
| | | out.write(data.getBytes(CHARSET)); |
| | | out.flush(); |
| | | out.close(); |
| | | return readResponseString(conn); |
| | | } |
| | | catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | finally { |
| | | if (conn != null) { |
| | | conn.disconnect(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | public static String jsonPut(String url,String data){ |
| | | Map<String,String> headers = new HashMap<>(); |
| | | headers.put("Content-Type","application/json"); |
| | | return put(url,null,data,headers); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * https 域名校验 |
| | | */ |
| | | private static class TrustAnyHostnameVerifier implements HostnameVerifier { |
| | | @Override |
| | | public boolean verify(String hostname, SSLSession session) { |
| | | return true; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * https 证书管理 |
| | | */ |
| | | private static class TrustAnyTrustManager implements X509TrustManager { |
| | | @Override |
| | | public X509Certificate[] getAcceptedIssuers() { |
| | | return null; |
| | | } |
| | | @Override |
| | | public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
| | | } |
| | | @Override |
| | | public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
| | | } |
| | | } |
| | | |
| | | private static SSLSocketFactory initSSLSocketFactory() { |
| | | try { |
| | | TrustManager[] tm = {new TrustAnyTrustManager()}; |
| | | SSLContext sslContext = SSLContext.getInstance("TLS", "SunJSSE"); |
| | | sslContext.init(null, tm, new java.security.SecureRandom()); |
| | | return sslContext.getSocketFactory(); |
| | | } |
| | | catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | private static final SSLSocketFactory sslSocketFactory = initSSLSocketFactory(); |
| | | private static final TrustAnyHostnameVerifier trustAnyHostnameVerifier = new TrustAnyHostnameVerifier(); |
| | | |
| | | private static HttpURLConnection getHttpConnection(String url, String method, Map<String, String> headers) throws Exception { |
| | | URL _url = new URL(url); |
| | | HttpURLConnection conn = (HttpURLConnection)_url.openConnection(); |
| | | if (conn instanceof HttpsURLConnection) { |
| | | ((HttpsURLConnection)conn).setSSLSocketFactory(sslSocketFactory); |
| | | ((HttpsURLConnection)conn).setHostnameVerifier(trustAnyHostnameVerifier); |
| | | } |
| | | conn.setRequestMethod(method); |
| | | conn.setDoOutput(true); |
| | | conn.setDoInput(true); |
| | | conn.setConnectTimeout(30000); |
| | | conn.setReadTimeout(30000); |
| | | conn.setUseCaches(false); // Post 请求不能使用缓存 |
| | | if(headers != null){ |
| | | String contentType = headers.get("Content-Type"); |
| | | if(StringUtils.isNotEmpty(contentType)){ |
| | | conn.setRequestProperty("Content-Type",contentType); |
| | | }else{ |
| | | conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded;charset=utf-8"); |
| | | } |
| | | } |
| | | conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36"); |
| | | if (headers != null && !headers.isEmpty()) |
| | | for (Map.Entry<String, String> entry : headers.entrySet()) |
| | | conn.setRequestProperty(entry.getKey(), entry.getValue()); |
| | | |
| | | return conn; |
| | | } |
| | | |
| | | private static String readResponseString(HttpURLConnection conn) { |
| | | StringBuilder sb = new StringBuilder(); |
| | | InputStream inputStream = null; |
| | | try { |
| | | inputStream = conn.getInputStream(); |
| | | BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, CHARSET)); |
| | | String line = null; |
| | | while ((line = reader.readLine()) != null){ |
| | | sb.append(line).append("\n"); |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | catch (Exception e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | finally { |
| | | if (inputStream != null) { |
| | | try { |
| | | inputStream.close(); |
| | | } catch (IOException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Build queryString of the url |
| | | */ |
| | | private static String buildUrlWithQueryString(String url, Map<String, String> queryParas) { |
| | | if (queryParas == null || queryParas.isEmpty()) |
| | | return url; |
| | | |
| | | StringBuilder sb = new StringBuilder(url); |
| | | boolean isFirst; |
| | | if (url.indexOf("?") == -1) { |
| | | isFirst = true; |
| | | sb.append("?"); |
| | | } |
| | | else { |
| | | isFirst = false; |
| | | } |
| | | |
| | | for (Map.Entry<String, String> entry : queryParas.entrySet()) { |
| | | if (isFirst) isFirst = false; |
| | | else sb.append("&"); |
| | | |
| | | String key = entry.getKey(); |
| | | String value = entry.getValue(); |
| | | if (!StringUtils.isEmpty(value)){ |
| | | try {value = URLEncoder.encode(value, CHARSET);} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);} |
| | | sb.append(key).append("=").append(value); |
| | | } |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | } |
| | | |
| | | |