packagecom.tzx.cc.common.constant.util;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.Reader;importjava.net.HttpURLConnection;importjava.net.SocketTimeoutException;importjava.net.URL;importjava.net.URLEncoder;importjava.security.SecureRandom;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.Map;importjava.util.Set;importjavax.net.ssl.HostnameVerifier;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.KeyManager;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSession;importjavax.net.ssl.TrustManager;importjavax.net.ssl.X509TrustManager;importorg.apache.commons.lang.StringUtils;/*** http请求工具类
*
*@authorzhangyong
**/
public classHttpUtils {private final String CTYPE_FORM = "application/x-www-form-urlencoded;charset=utf-8";private final String CTYPE_JSON = "application/json; charset=utf-8";private final String charset = "utf-8";private static HttpUtils instance = null;public staticHttpUtils getInstance() {if (instance == null) {return newHttpUtils();
}returninstance;
}private class DefaultTrustManager implementsX509TrustManager {publicX509Certificate[] getAcceptedIssuers() {return null;
}public voidcheckClientTrusted(X509Certificate[] chain, String authType)throwsCertificateException {
}public voidcheckServerTrusted(X509Certificate[] chain, String authType)throwsCertificateException {
}
}/*** 以application/json; charset=utf-8方式传输
*
*@paramurl
*@paramrequestContent
*@return*@throwsSocketTimeoutException
*@throwsIOException*/
publicString postJson(String url, String jsonContent)throwsSocketTimeoutException, IOException {return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,null);
}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
*@paramurl
*@paramrequestContent
*@return*@throwsSocketTimeoutException
*@throwsIOException*/
public String postForm(String url) throwsSocketTimeoutException,
IOException {return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);
}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
*@paramurl
*@paramrequestContent
*@return*@throwsSocketTimeoutException
*@throwsIOException*/
public String postForm(String url, Mapparams)throwsSocketTimeoutException, IOException {return doRequest("POST", url, buildQuery(params), 15000, 15000,
CTYPE_FORM,null);
}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
*@paramurl
*@paramrequestContent
*@return*@throwsSocketTimeoutException
*@throwsIOException*/
public String getForm(String url) throwsSocketTimeoutException,
IOException {return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);
}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
*@paramurl
*@paramrequestContent
*@return*@throwsSocketTimeoutException
*@throwsIOException*/
public String getForm(String url, Mapparams)throwsSocketTimeoutException, IOException {return doRequest("GET", url, buildQuery(params), 15000, 15000,
CTYPE_FORM,null);
}privateString doRequest(String method, String url, String requestContent,int connectTimeout, intreadTimeout, String ctype,
Map headerMap) throwsSocketTimeoutException,
IOException {
HttpURLConnection conn= null;
OutputStream out= null;
String rsp= null;try{
conn= getConnection(newURL(url), method, ctype, headerMap);
conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout);if(!StringUtils.isEmpty(requestContent)){
out=conn.getOutputStream();
out.write(requestContent.getBytes(charset));
}
rsp=getResponseAsString(conn);
}finally{if (out != null) {
out.close();
}if (conn != null) {
conn.disconnect();
}
conn= null;
}returnrsp;
}privateHttpURLConnection getConnection(URL url, String method,
String ctype, Map headerMap) throwsIOException {
HttpURLConnection conn;if ("https".equals(url.getProtocol())) {
SSLContext ctx;try{
ctx= SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0],new TrustManager[] { newDefaultTrustManager() },newSecureRandom());
}catch(Exception e) {throw newIOException(e);
}
HttpsURLConnection connHttps=(HttpsURLConnection) url
.openConnection();
connHttps.setSSLSocketFactory(ctx.getSocketFactory());
connHttps.setHostnameVerifier(newHostnameVerifier() {public booleanverify(String hostname, SSLSession session) {return true;
}
});
conn=connHttps;
}else{
conn=(HttpURLConnection) url.openConnection();
}
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Accept","text/xml,text/javascript,text/html,application/json");
conn.setRequestProperty("Content-Type", ctype);if (headerMap != null) {for (Map.Entryentry : headerMap.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}returnconn;
}privateString getResponseAsString(HttpURLConnection conn)throwsIOException {
InputStream es=conn.getErrorStream();if (es == null) {returngetStreamAsString(conn.getInputStream(), charset, conn);
}else{
String msg=getStreamAsString(es, charset, conn);if(StringUtils.isEmpty(msg)) {throw new IOException(conn.getResponseCode() + ":"
+conn.getResponseMessage());
}else{returnmsg;
}
}
}privateString getStreamAsString(InputStream stream, String charset,
HttpURLConnection conn)throwsIOException {try{
Reader reader= newInputStreamReader(stream, charset);
StringBuilder response= newStringBuilder();final char[] buff = new char[1024];int read = 0;while ((read = reader.read(buff)) > 0) {
response.append(buff,0, read);
}returnresponse.toString();
}finally{if (stream != null) {
stream.close();
}
}
}private String buildQuery(Map params) throwsIOException {if (params == null ||params.isEmpty()) {return "";
}
StringBuilder query= newStringBuilder();
Set> entries =params.entrySet();boolean hasParam = false;for (Map.Entryentry : entries) {
String name=entry.getKey();
String value=entry.getValue();if(hasParam) {
query.append("&");
}else{
hasParam= true;
}
query.append(name).append("=")
.append(URLEncoder.encode(value, charset));
}returnquery.toString();
}
}