首先写getSslsf()方法: private static SSLConnectionSocketFactory getSslsf() throws NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = SSLContext.getInstance("SSL");//sslContext= SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException { } public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; sslContext.init(null, new TrustManager[] { tm }, null); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); /*Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory> create() .register("http", PlainConnectionSocketFactory.INSTANCE).register("https", sslsf).build(); */ return sslsf; }
再次创建HttpClients.custom().setSSLSocketFactory(getSslsf()).build()的httpClient;
CloseableHttpClient httpClient = null; HttpPost httpPost = null; try { httpClient = HttpClients.custom().setSSLSocketFactory(getSslsf()).build();//实例化HttpClients对象 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(20000).setConnectTimeout(20000).build();//构建RequestConfig对象 httpPost = new HttpPost(url);//构建HttpPost对象 httpPost.setConfig(requestConfig);//设置RequestConfig /** * 在请求正文中,可以随意的提交一段字符串给服务器,现在为了数据交换的统一性,所以大家都是提交的一段json串 * 所以body的数据格式{"name":"zhangsan","age":18},如果body是该数据格式,则Content-Type要设置为application/json * new StringEntity(body)是指利用body构建一个请求正文对象,且StringEntity是支持Content-Type为application/json的, * 所以,如果用StringEntity对象且body的数据为json串,则无需我们再设置Content-type */ httpPost.setHeader("Content-Type","application/json");//setHeader是设置请求头,该句代码是设置Content-Type,要设置其它的请求头,也是setHeader方法 httpPost.setHeader("Connection","keep-alive"); httpPost.setEntity(new StringEntity(body));//设置请求正文,也就是设置json串 // httpPost.setEntity(new StringEntity(body,"application/x-www-form-urlencoded"));//同上面两句代码一个意思 //SSLSocketFactory.getSocketFactory().setHostnameVerifier(new AllowAllHostnameVerifier()); //SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(sslContext,SSLConnectionSocktFactory.ALLOW_ALL_HOSTNAME_VERIFIER); CloseableHttpResponse response = httpClient.execute(httpPost); HttpEntity httpEntity = response.getEntity();//获取响应正文对象 String result = EntityUtils.toString(httpEntity,"utf-8"); System.out.println("***"+result); return result;//按编码输出响应正文 } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(httpPost !=null){ httpPost.releaseConnection(); } if(httpClient !=null){ httpClient.close(); } } catch (IOException e) { e.printStackTrace(); } } return null;