你的位置:首页 > Java教程

[Java教程]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);	}