httpclient发起https请求以及获取https返回内容

 

工作中的需要,使用Apache httpclient发起获取通过https返回的内容,试了很多网上的解决办法都不行,查阅了Apache httpclient的官方文档,最后终于找出解决方法,分享给需要的朋友,免得走弯路。

使用时,调用getSSL方法即可获取https地址返回的内容。

代码如下:

 

	public static String getSSL(String url, String responseDecode) throws IOException {
		
		CloseableHttpClient httpclient = createSSLInsecureClient();
		CloseableHttpResponse response = null;
		String content = null;
		try {
			HttpGet httpget = new HttpGet(url);
			RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000)
                        .setConnectionRequestTimeout(5000).build();
			httpget.setConfig(requestConfig);
			response = httpclient.execute(httpget);
			HttpEntity entity = response.getEntity();
			if (entity != null) {
				content = EntityUtils.toString(entity);
				EntityUtils.consume(entity);
			}
		} catch (ParseException e) {
			logger.error("request URL[" + url + "] error", e);
			throw e;
		} catch (IOException e) {
			logger.error("request URL[" + url + "] error", e);
			throw e;
		} finally {
			if (response != null) {
				try {
					response.close();
				} catch (IOException e) {
					logger.error("", e);
				}
			}
			if (httpclient != null) {
				try {
					httpclient.close();
				} catch (IOException e) {
					logger.error("", e);
				}
			}
		}
		return content;
	}
	
	private static CloseableHttpClient createSSLInsecureClient() {
		try {
			SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
				@Override
				public boolean isTrusted(java.security.cert.X509Certificate[] arg0, String arg1) {
					return true;
				}
			}).build();
			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
			return HttpClients.custom().setSSLSocketFactory(sslsf).build();
		} catch (KeyManagementException e) {
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		} catch (KeyStoreException e) {
			e.printStackTrace();
		}
		return HttpClients.createDefault();
	}
	
	public static void main(String[] args) {
		ShiroUser  user = UMSHelper.invoke("10001", "10102130023000");
		System.out.println(user);
	}

 

posted @ 2016-07-22 14:43  蒙涯  阅读(2856)  评论(0编辑  收藏  举报
蒙面天涯 与狼为伍 四海为家