绕过证书认证的http工具类

package com.awspaas.user.apps.ask_leave.Utils;

import javax.net.ssl.*;
import javax.servlet.http.HttpServletRequest;

import com.actionsoft.sdk.local.api.LogAPI;
import com.actionsoft.sdk.local.api.Logger;
import org.apache.commons.lang.StringUtils;
import javax.net.ssl.X509TrustManager;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.cert.X509Certificate;
import java.util.HashMap;
import java.util.Map;



public class HttpUtil {
	protected static Logger logger = LogAPI.getLogger(HttpUtil.class);

	//添加主机名验证程序类,设置不验证主机
	private final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
		public boolean verify(String hostname, SSLSession session) {
			return true;
		}
	};

	//添加信任主机
	private static void trustAllHosts() {
		// 创建不验证证书链的信任管理器 这里使用的是x509证书
		TrustManager[] trustAllCerts = new TrustManager[]{new MyX509TrustManager() {
			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
				return new java.security.cert.X509Certificate[]{};
			}

			public void checkClientTrusted(X509Certificate[] chain, String authType) {
			}

			public void checkServerTrusted(X509Certificate[] chain, String authType) {
			}
		}};
		// 安装所有信任的信任管理器
		try {
			SSLContext sc = SSLContext.getInstance("TLS");
			sc.init(null, trustAllCerts, new java.security.SecureRandom());
			//HttpsURLConnection通过SSLSocket来建立与HTTPS的安全连接,SSLSocket对象是由SSLSocketFactory生成的。
			HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 *  发送post 数据
	 * @param urls
	 * @return
	 */
	public static String heart(String urls, String param, String method) {
		StringBuffer sb=new StringBuffer();
		DataOutputStream out = null;
		BufferedReader responseReader = null;
		InputStream in1 = null;
		try {
			trustAllHosts();
			// 创建url资源
			URL url = new URL(urls);
			// 建立http连接
			HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
			conn.setHostnameVerifier(DO_NOT_VERIFY);
			// 设置不用缓存
			conn.setUseCaches(false);
			// 设置允许输出
			conn.setDoOutput(true);
			// 设置允许输入
			conn.setDoInput(true);
			// 设置传递方式
			conn.setRequestMethod(method);
			//System.out.println(conn.getRequestMethod());
			conn.setRequestProperty("Accept", "*/*");
			// 添加验证 todo
			conn.setRequestProperty("Content-Type", "application/json");
			// 设置文件字符集:
			conn.setRequestProperty("Charset", "UTF-8");
			// 转换为字节数组
//            byte[] data = (param).getBytes();
//            // 设置文件长度
//            conn.setRequestProperty("Content-Length", String.valueOf(data.length));
			// 设置文件类型:
			// 开始连接请求
			conn.connect();
			out = new DataOutputStream(conn.getOutputStream());
			// 写入请求的字符串
			out.writeBytes(param);
			out.flush();

			//System.out.println(conn.getResponseCode());

			// 请求返回的状态
			if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
				// 请求返回的数据
				in1 = conn.getInputStream();
				String readLine;
				responseReader = new BufferedReader(new InputStreamReader(in1));
				while((readLine=responseReader.readLine()) != null){
					sb.append(readLine).append("\n");
				}
			} else {
				logger.info("haikang error:"+conn.getResponseCode());
				logger.info("haikang error:"+conn.getContent());
			}
		} catch (Exception e) {
			logger.info("haikang Exception:");
			e.printStackTrace();
		} finally {
			try {
				if (null != responseReader)
					responseReader.close();
				if (null != in1)
					in1.close();
			} catch(Exception e) {}
			try {
				out.close();
			} catch(Exception e) {}
		}

		return sb.toString();

	}

	/**
	 *  发送post 数据
	 * @param urls
	 * @return
	 */
	public static String sendPost(String urls, String param, String contentType, String method) {
		StringBuffer sb=new StringBuffer();
		DataOutputStream out = null;
		BufferedReader responseReader = null;
		InputStream in1 = null;
		try {
			trustAllHosts();
			// 创建url资源
			URL url = new URL(urls);
			// 建立http连接
			HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
			conn.setHostnameVerifier(DO_NOT_VERIFY);
			// 设置不用缓存
			conn.setUseCaches(false);
			// 设置允许输出
			conn.setDoOutput(true);
			// 设置允许输入
			conn.setDoInput(true);
			// 设置传递方式
			conn.setRequestMethod(method);
			//System.out.println(conn.getRequestMethod());
			// 设置维持长连接
			conn.setRequestProperty("Connection", "Keep-Alive");
			// 设置文件字符集:
			conn.setRequestProperty("Charset", "UTF-8");
			// 转换为字节数组
//            byte[] data = (param).getBytes();
//            // 设置文件长度
//            conn.setRequestProperty("Content-Length", String.valueOf(data.length));
			// 设置文件类型:
			conn.setRequestProperty("Content-Type", contentType);
			// 开始连接请求
			conn.connect();
			out = new DataOutputStream(conn.getOutputStream());
			// 写入请求的字符串
			out.writeBytes(param);
			out.flush();

			//System.out.println(conn.getResponseCode());

			// 请求返回的状态
			if (HttpURLConnection.HTTP_OK == conn.getResponseCode()) {
				// 请求返回的数据
				in1 = conn.getInputStream();
				String readLine;
				responseReader = new BufferedReader(new InputStreamReader(in1));
				while((readLine=responseReader.readLine()) != null){
					sb.append(readLine).append("\n");
				}
			} else {
				logger.info("haikang error :" +conn.getResponseCode());
			}
		} catch (Exception e) {
			logger.error("haikang Exception :" +e.getMessage());
			e.printStackTrace();
		} finally {
			try {
				if (null != responseReader)
					responseReader.close();
				if (null != in1)
					in1.close();
			} catch(Exception e) {}
			try {
				out.close();
			} catch(Exception e) {}
		}

		return sb.toString();

	}
}

你可能感兴趣的:(http,java,servlet)