You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
6.5 KiB
238 lines
6.5 KiB
package com.fr.plugin.xxx.zojj.sso.util; |
|
|
|
import javax.net.ssl.*; |
|
import java.io.*; |
|
import java.net.HttpURLConnection; |
|
import java.net.URL; |
|
import java.net.URLEncoder; |
|
import java.security.KeyManagementException; |
|
import java.security.NoSuchAlgorithmException; |
|
import java.security.NoSuchProviderException; |
|
import java.security.cert.CertificateException; |
|
import java.security.cert.X509Certificate; |
|
import java.util.Map; |
|
import java.util.Map.Entry; |
|
|
|
/** |
|
* |
|
* @version V1.0 |
|
* @ClassName: HttpClient |
|
* @Description: HTTP |
|
*/ |
|
public class HttpClient { |
|
|
|
/** |
|
* https 域名校验 |
|
*/ |
|
private class TrustAnyHostnameVerifier implements HostnameVerifier { |
|
public boolean verify(String hostname, SSLSession session) { |
|
return true; |
|
} |
|
} |
|
|
|
/** |
|
* https 证书管理 |
|
*/ |
|
private class TrustAnyTrustManager implements X509TrustManager { |
|
public X509Certificate[] getAcceptedIssuers() { |
|
return null; |
|
} |
|
|
|
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
|
} |
|
|
|
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { |
|
} |
|
} |
|
|
|
private static final String GET = "GET"; |
|
private static final String POST = "POST"; |
|
// private static final String CHARSET = "GBK"; |
|
private static final String CHARSET = "UTF-8"; |
|
|
|
private static final SSLSocketFactory sslSocketFactory = initSSLSocketFactory(); |
|
private static final TrustAnyHostnameVerifier trustAnyHostnameVerifier = new HttpClient().new TrustAnyHostnameVerifier(); |
|
|
|
private static SSLSocketFactory initSSLSocketFactory() { |
|
try { |
|
TrustManager[] tm = { new HttpClient().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 HttpURLConnection getHttpConnection(String url, String method, Map<String, String> headers) |
|
throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException { |
|
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(19000); |
|
conn.setReadTimeout(19000); |
|
|
|
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); |
|
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 (Entry<String, String> entry : headers.entrySet()) |
|
conn.setRequestProperty(entry.getKey(), entry.getValue()); |
|
|
|
return conn; |
|
} |
|
|
|
/** |
|
* 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), GET, headers); |
|
conn.connect(); |
|
return readResponseString(conn); |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
System.out.println(e.getMessage()); |
|
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); |
|
} |
|
|
|
/** |
|
* 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), 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, Map<String, String> data) { |
|
return post(url, 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); |
|
} |
|
|
|
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); |
|
} |
|
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 (Entry<String, String> entry : queryParas.entrySet()) { |
|
if (isFirst) |
|
isFirst = false; |
|
else |
|
sb.append("&"); |
|
|
|
String key = entry.getKey(); |
|
String value = entry.getValue(); |
|
if (value != null && !"".equals(value)) |
|
try { |
|
value = URLEncoder.encode(value, CHARSET); |
|
} catch (UnsupportedEncodingException e) { |
|
throw new RuntimeException(e); |
|
} |
|
sb.append(key).append("=").append(value); |
|
} |
|
return sb.toString(); |
|
} |
|
|
|
public enum HttpContentType { |
|
JSON("Content-Type", "application/json; charset=UTF-8"), TEXT("Content-Type", "application/text; charset=UTF-8"), XML("Content-Type", "text/xml; charset=UTF-8"); |
|
private String type; |
|
private String context; |
|
|
|
public String getType() { |
|
return this.type; |
|
} |
|
|
|
public String getContext() { |
|
return this.context; |
|
} |
|
|
|
private HttpContentType(String type, String context) { |
|
this.type = type; |
|
this.context = context; |
|
} |
|
} |
|
} |