Java tutorial
/* * Copyright 2005-2015 shopxx.net. All rights reserved. * Support: http://www.shopxx.net * License: http://www.shopxx.net/license */ package cn.mrdear.pay.util; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URLEncodedUtils; 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.conn.ssl.SSLContexts; import org.apache.http.entity.InputStreamEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.security.KeyStore; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.net.ssl.SSLContext; /** * Utils - Web * * @author SHOP++ Team * @version 4.0 */ public final class WebUtils { /** PoolingHttpClientConnectionManager */ private static final PoolingHttpClientConnectionManager HTTP_CLIENT_CONNECTION_MANAGER; /** CloseableHttpClient */ private static final CloseableHttpClient HTTP_CLIENT; static { HTTP_CLIENT_CONNECTION_MANAGER = new PoolingHttpClientConnectionManager(RegistryBuilder .<ConnectionSocketFactory>create().register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https", SSLConnectionSocketFactory.getSocketFactory()).build()); HTTP_CLIENT_CONNECTION_MANAGER.setDefaultMaxPerRoute(100); HTTP_CLIENT_CONNECTION_MANAGER.setMaxTotal(200); RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(60000) .setConnectTimeout(60000).setSocketTimeout(60000).build(); HTTP_CLIENT = HttpClientBuilder.create().setConnectionManager(HTTP_CLIENT_CONNECTION_MANAGER) .setDefaultRequestConfig(requestConfig).build(); } /** * ?? */ private WebUtils() { } /** * ?? * * @param query * * @param encoding * ?? * @return ? */ public static Map<String, String> parse(String query, String encoding) { Charset charset; if (StringUtils.isNotEmpty(encoding)) { charset = Charset.forName(encoding); } else { charset = Charset.forName("UTF-8"); } List<NameValuePair> nameValuePairs = URLEncodedUtils.parse(query, charset); Map<String, String> parameterMap = new HashMap<String, String>(); for (NameValuePair nameValuePair : nameValuePairs) { parameterMap.put(nameValuePair.getName(), nameValuePair.getValue()); } return parameterMap; } /** * ?? * * @param query * * @return ? */ public static Map<String, String> parse(String query) { return parse(query, null); } /** * POST * * @param url * URL * @param parameterMap * ? * @return */ public static String post(String url, Map<String, Object> parameterMap) { String result = null; try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); if (parameterMap != null) { for (Map.Entry<String, Object> entry : parameterMap.entrySet()) { String name = entry.getKey(); String value = String.valueOf(entry.getValue()); if (StringUtils.isNotEmpty(name)) { nameValuePairs.add(new BasicNameValuePair(name, value)); } } } HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8")); CloseableHttpResponse httpResponse = HTTP_CLIENT.execute(httpPost); result = consumeResponse(httpResponse); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.getMessage(), e); } catch (ClientProtocolException e) { throw new RuntimeException(e.getMessage(), e); } catch (ParseException e) { throw new RuntimeException(e.getMessage(), e); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } return result; } /** * POST * * @param url * URL * @param inputStreamEntity * * @return */ public static String post(String url, InputStreamEntity inputStreamEntity) { String result = null; try { HttpPost httpPost = new HttpPost(url); inputStreamEntity.setContentEncoding("UTF-8"); httpPost.setEntity(inputStreamEntity); CloseableHttpResponse httpResponse = HTTP_CLIENT.execute(httpPost); result = consumeResponse(httpResponse); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.getMessage(), e); } catch (ClientProtocolException e) { throw new RuntimeException(e.getMessage(), e); } catch (ParseException e) { throw new RuntimeException(e.getMessage(), e); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } return result; } /** * GET * * @param url * URL * @param parameterMap * ? * @return */ public static String get(String url, Map<String, Object> parameterMap) { String result = null; try { List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); if (parameterMap != null) { for (Map.Entry<String, Object> entry : parameterMap.entrySet()) { String name = entry.getKey(); String value = String.valueOf(entry.getValue()); if (StringUtils.isNotEmpty(name)) { nameValuePairs.add(new BasicNameValuePair(name, value)); } } } HttpGet httpGet = new HttpGet(url + (StringUtils.contains(url, "?") ? "&" : "?") + EntityUtils.toString(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"))); CloseableHttpResponse httpResponse = HTTP_CLIENT.execute(httpGet); result = consumeResponse(httpResponse); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e.getMessage(), e); } catch (ParseException e) { throw new RuntimeException(e.getMessage(), e); } catch (ClientProtocolException e) { throw new RuntimeException(e.getMessage(), e); } catch (IOException e) { throw new RuntimeException(e.getMessage(), e); } return result; } /** * ? * @param certPath ? * @param passwd ?? * @param uri ? * @param entity xml * @return */ public static String post(String certPath, String passwd, String uri, InputStreamEntity entity) throws Exception { String result = null; KeyStore keyStore = KeyStore.getInstance("PKCS12"); FileInputStream instream = new FileInputStream(new File(certPath)); try { keyStore.load(instream, passwd.toCharArray()); } finally { instream.close(); } SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, passwd.toCharArray()).build(); // Allow TLSv1 protocol only SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER); CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build(); try { HttpPost httpPost = new HttpPost(uri); entity.setContentEncoding("UTF-8"); httpPost.setEntity(entity); CloseableHttpResponse httpResponse = httpclient.execute(httpPost); result = consumeResponse(httpResponse); } finally { httpclient.close(); } return result; } /** * ?, * @param httpResponse ?? * @return */ private static String consumeResponse(CloseableHttpResponse httpResponse) { String result = null; try { HttpEntity httpEntity = httpResponse.getEntity(); if (httpEntity != null) { result = EntityUtils.toString(httpEntity, "UTF-8"); EntityUtils.consume(httpEntity); } } catch (IOException e) { e.printStackTrace(); } finally { try { httpResponse.close(); } catch (IOException ignored) { } } return result; } }