• HttpsUtils


    package com.app.dts.action;
     
    import java.io.IOException;
    import java.io.InputStream;
    import java.nio.charset.Charset;
    import java.security.GeneralSecurityException;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
     
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLException;
    import javax.net.ssl.SSLSession;
    import javax.net.ssl.SSLSocket;
     
    import org.apache.commons.io.IOUtils;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.HttpStatus;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    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.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.conn.ssl.SSLContextBuilder;
    import org.apache.http.conn.ssl.TrustStrategy;
    import org.apache.http.conn.ssl.X509HostnameVerifier;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.DefaultHttpClient;
    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;
     
    /**
    * @FileName HttpsUtils.java
    * @Description: HTTP 请求工具类
    *
    * @Date 2017年6月26日
    *
    */
    public class HttpUtils {
    private static PoolingHttpClientConnectionManager connMgr;
    private static RequestConfig requestConfig;
    private static final int MAX_TIMEOUT = 7000;
     
    static {
    // 设置连接池
    connMgr = new PoolingHttpClientConnectionManager();
    // 设置连接池大小
    connMgr.setMaxTotal(100);
    connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());
     
    RequestConfig.Builder configBuilder = RequestConfig.custom();
    // 设置连接超时
    configBuilder.setConnectTimeout(MAX_TIMEOUT);
    // 设置读取超时
    configBuilder.setSocketTimeout(MAX_TIMEOUT);
    // 设置从连接池获取连接实例的超时
    configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
    // 在提交请求之前 测试连接是否可用
    configBuilder.setStaleConnectionCheckEnabled(true);
    requestConfig = configBuilder.build();
    }
     
    /**
    * 发送 GET 请求(HTTP),不带输入数据
    *
    * @param url
    * @return
    */
    public static String doGet(String url) {
    return doGet(url, new HashMap<String, Object>());
    }
     
    /**
    * 发送 GET 请求(HTTP),K-V形式
    *
    * @param url
    * @param params
    * @return
    */
    @SuppressWarnings({ "resource", "deprecation" })
    public static String doGet(String url, Map<String, Object> params) {
    String apiUrl = url;
    StringBuffer param = new StringBuffer();
    int i = 0;
    for (String key : params.keySet()) {
    if (i == 0)
    param.append("?");
    else
    param.append("&");
    param.append(key).append("=").append(params.get(key));
    i++;
    }
    apiUrl += param;
    String result = null;
    HttpClient httpclient = new DefaultHttpClient();
    try {
    HttpGet httpPost = new HttpGet(apiUrl);
    HttpResponse response = httpclient.execute(httpPost);
    int statusCode = response.getStatusLine().getStatusCode();
     
    System.out.println("执行状态码 : " + statusCode);
     
    HttpEntity entity = response.getEntity();
    if (entity != null) {
    InputStream instream = entity.getContent();
    result = IOUtils.toString(instream, "UTF-8");
    }
    } catch (IOException e) {
    e.printStackTrace();
    }
    return result;
    }
     
    /**
    * 发送 POST 请求(HTTP),不带输入数据
    *
    * @param apiUrl
    * @return
    */
    public static String doPost(String apiUrl) {
    return doPost(apiUrl, new HashMap<String, Object>());
    }
     
    /**
    * 发送 POST 请求(HTTP),K-V形式
    *
    * @param apiUrl API接口URL
    * @param params 参数map
    * @return
    */
    public static String doPost(String apiUrl, Map<String, Object> params) {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    String httpStr = null;
    HttpPost httpPost = new HttpPost(apiUrl);
    CloseableHttpResponse response = null;
     
    try {
    httpPost.setConfig(requestConfig);
    List<NameValuePair> pairList = new ArrayList<>(params.size());
    for (Map.Entry<String, Object> entry : params.entrySet()) {
    NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());
    pairList.add(pair);
    }
    httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8")));
    response = httpClient.execute(httpPost);
    System.out.println(response.toString());
    HttpEntity entity = response.getEntity();
    httpStr = EntityUtils.toString(entity, "UTF-8");
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (response != null) {
    try {
    EntityUtils.consume(response.getEntity());
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    return httpStr;
    }
     
    /**
    * 发送 POST 请求(HTTP),JSON形式
    *
    * @param apiUrl
    * @param json json对象
    * @return
    */
    public static String doPost(String apiUrl, Object json) {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    String httpStr = null;
    HttpPost httpPost = new HttpPost(apiUrl);
    CloseableHttpResponse response = null;
     
    try {
    httpPost.setConfig(requestConfig);
    StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");// 解决中文乱码问题
    stringEntity.setContentEncoding("UTF-8");
    stringEntity.setContentType("application/json");
    httpPost.setEntity(stringEntity);
    response = httpClient.execute(httpPost);
    HttpEntity entity = response.getEntity();
    System.out.println(response.getStatusLine().getStatusCode());
    httpStr = EntityUtils.toString(entity, "UTF-8");
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if (response != null) {
    try {
    EntityUtils.consume(response.getEntity());
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    return httpStr;
    }
     
    /**
    * 发送 SSL POST 请求(HTTPS),K-V形式
    *
    * @param apiUrl API接口URL
    * @param params 参数map
    * @return
    */
    public static String doPostSSL(String apiUrl, Map<String, Object> params) {
    CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
    .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
    HttpPost httpPost = new HttpPost(apiUrl);
    CloseableHttpResponse response = null;
    String httpStr = null;
     
    try {
    httpPost.setConfig(requestConfig);
    List<NameValuePair> pairList = new ArrayList<NameValuePair>(params.size());
    for (Map.Entry<String, Object> entry : params.entrySet()) {
    NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());
    pairList.add(pair);
    }
    httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("utf-8")));
    response = httpClient.execute(httpPost);
    int statusCode = response.getStatusLine().getStatusCode();
    if (statusCode != HttpStatus.SC_OK) {
    return null;
    }
    HttpEntity entity = response.getEntity();
    if (entity == null) {
    return null;
    }
    httpStr = EntityUtils.toString(entity, "utf-8");
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (response != null) {
    try {
    EntityUtils.consume(response.getEntity());
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    return httpStr;
    }
     
    /**
    * 发送 SSL POST 请求(HTTPS),JSON形式
    *
    * @param apiUrl API接口URL
    * @param json JSON对象
    * @return
    */
    public static String doPostSSL(String apiUrl, Object json) {
    CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory())
    .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build();
    HttpPost httpPost = new HttpPost(apiUrl);
    CloseableHttpResponse response = null;
    String httpStr = null;
     
    try {
    httpPost.setConfig(requestConfig);
    StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");// 解决中文乱码问题
    stringEntity.setContentEncoding("UTF-8");
    stringEntity.setContentType("application/json");
    httpPost.setEntity(stringEntity);
    response = httpClient.execute(httpPost);
    int statusCode = response.getStatusLine().getStatusCode();
    if (statusCode != HttpStatus.SC_OK) {
    return null;
    }
    HttpEntity entity = response.getEntity();
    if (entity == null) {
    return null;
    }
    httpStr = EntityUtils.toString(entity, "utf-8");
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (response != null) {
    try {
    EntityUtils.consume(response.getEntity());
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    return httpStr;
    }
     
    /**
    * 创建SSL安全连接
    *
    * @return
    */
    private static SSLConnectionSocketFactory createSSLConnSocketFactory() {
    SSLConnectionSocketFactory sslsf = null;
    try {
    SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
     
    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    return true;
    }
    }).build();
    sslsf = new SSLConnectionSocketFactory(sslContext, new X509HostnameVerifier() {
     
    @Override
    public boolean verify(String arg0, SSLSession arg1) {
    return true;
    }
     
    @Override
    public void verify(String host, SSLSocket ssl) throws IOException {
    }
     
    @Override
    public void verify(String host, X509Certificate cert) throws SSLException {
    }
     
    @Override
    public void verify(String host, String[] cns, String[] subjectAlts) throws SSLException {
    }
    });
    } catch (GeneralSecurityException e) {
    e.printStackTrace();
    }
    return sslsf;
    }
    }
  • 相关阅读:
    JavaWeb学习笔记(3)
    JavaWeb学习笔记(2)
    JavaWeb学习笔记(1)
    Java学习笔记(20)
    Java学习笔记(19)
    Java学习笔记(18)
    Java学习笔记(17)
    Java学习笔记(16)
    Java学习笔记(15)
    Java学习笔记(14)
  • 原文地址:https://www.cnblogs.com/-mzh/p/11174008.html
Copyright © 2020-2023  润新知