JAVA-发送带有证书检测的http请求


import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.text.MessageFormat;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.commons.codec.binary.Base64;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.util.EntityUtils;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class HttpHelperUtils {
	/**
	 * 带有证书检测的http发送
	 */
	public static ActionResult<String> sendHttpGet(String url, String userName, String password) {
		int statusCode = 0;
		SSLContext sslcontext = null;
		HttpEntity resEntity = null;
		CloseableHttpResponse response = null;
		ActionResult<String> ret = new ActionResult<String>(null);
		try {
			sslcontext = createIgnoreVerifySSL();
			Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
					.register("http", PlainConnectionSocketFactory.INSTANCE)
					.register("https", new SSLConnectionSocketFactory(sslcontext)).build();
			PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(
					socketFactoryRegistry);
			HttpClients.custom().setConnectionManager(connManager);
			CloseableHttpClient client = HttpClients.custom().setConnectionManager(connManager).build();
			String urlNameString = url;
			HttpGet get = new HttpGet(urlNameString);
			String auth = "Basic "
					+ new String(Base64.encodeBase64(MessageFormat.format("{0}:{1}", userName, password).getBytes()));
			get.setHeader("Authorization", auth);
			response = client.execute(get);
			// 检验返回码
			statusCode = response.getStatusLine().getStatusCode();
			ret.respCode = String.valueOf(statusCode);
			if (statusCode != 200) {
				ret.errorMessage = MessageFormat.format("connect service failed, http code = {0}", statusCode);
				log.error(ret.errorMessage);
			} else {
				resEntity = response.getEntity();
				if (resEntity != null) {
					ret.isSuccess = true;
					ret.returnData = EntityUtils.toString(resEntity, "UTF-8");
				} else {
					ret.errorMessage = "received http message is empty";
					log.error(ret.errorMessage);
				}
				EntityUtils.consume(resEntity);
			}
			response.close();
		} catch (Exception e) {
			ret.isSuccess = false;
			ret.errorMessage = "happen exception";

			log.error(MessageFormat.format("sendHttpGet() failed, {0}, http code = {1}", url, statusCode), e);
		} finally {
			response = null;
		}
		return ret;
	}

	public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
		SSLContext sc = SSLContext.getInstance("SSLv3");
		X509TrustManager trustManager = new X509TrustManager() {
			@Override
			public void checkClientTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
					String paramString) {
			}

			@Override
			public void checkServerTrusted(java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
					String paramString) {
			}

			@Override
			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
				return null;
			}
		};
		sc.init(null, new TrustManager[] { trustManager }, null);
		return sc;
	}
}

 


版权声明:本文为wanlong360599336原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。