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版权协议,转载请附上原文出处链接和本声明。