1、获取发送https请求的httpClient客户端
public class SSLClient {
public static CloseableHttpClient getClient(byte[] cert, String pass, String certType) throws Exception{
KeyStore keyStore =KeyStore.getInstance(certType);
KeyManager[] keyManagers = null;
try(ByteArrayInputStream bis = new ByteArrayInputStream(cert)){
keyStore.load(bis,pass.toCharArray());
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("sunX509");
keyManagerFactory.init(keyStore, pass.toCharArray());
keyManagers = keyManagerFactory.getKeyManagers();
}
SSLContext sc = SSLContext.getInstance("TLS");
TrustManager[] trustManagerArray = {new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
}
}};
sc.init(keyManagers, trustManagerArray, null);
return HttpClientBuilder.create().setSSLHostnameVerifier(new NoCheckHttpsHostnameVerifier()).setSSLContext(sc).build();
}
}
2、拼接请求参数,发送请求
CloseableHttpResponse response = null;
try {
HttpPost post = new HttpPost(url.toString());
//拼接请求参数
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.addTextBody(Constants.SignKey.INS_SECRET_ACCESS,instance.getId(), ContentType.TEXT_PLAIN.withCharset("UTF-8"));
JSONObject logObj = new JSONObject();
if (parameters!= null && !parameters.isEmpty()) {
String[] sortedKeys = parameters.keySet().toArray(new String[] {});
Arrays.sort(sortedKeys);
for (String key : sortedKeys) {
Object value = parameters.get(key);
if(!(value instanceof byte[])){
ASAPI.getLogger(SignUtils.class).debug("REQPARAMETER——————"+key+":"+value);
builder.addTextBody(key, (String) value, ContentType.TEXT_PLAIN.withCharset("UTF-8"));
logObj.put(key, value);
}else{
//文件流
WebApplicationContext webApplicationContext = ContextLoader
.getCurrentWebApplicationContext();
ServletContext servletContext = webApplicationContext
.getServletContext();
// 得到文件绝对路径
String basePath = servletContext.getRealPath("/");
String tempRoot = basePath+"temp";
//清理临时文件
FileUtils.clearTempFile(tempRoot);
File temp = new File(tempRoot+File.separator+IdGenerator.getShortUUID("temp"));
IOUtils.write((byte[]) value, new FileOutputStream(temp));
ASAPI.getLogger(SignUtils.class).debug("REQPARAMETER——————"+key+":"+"*********");
builder.addBinaryBody(key,temp);
logObj.put(key, "*****");
}
}
}
//param.add(new BasicNameValuePair(Constants.SignKey.INS_SIGNATURE, signature));
post.setEntity(builder.build());
post.setConfig(requestConfig);
ASAPI.getLogger(SignUtils.class).debug("request for="+instance.getHost()+":"+instance.getPort()+"开始执行POST请求,请求参数======="+logObj.toJSONString());
response = client.execute(post);
parameters.remove("aarFiles");
ASAPI.getLogger(SignUtils.class).info(parameters+"POST请求结束,请求参数======="+logObj.toJSONString());
//处理返回结果
setResponseString(response,resultBean,clazz);