HttpClientUtils.java 5.2 KB
package com.bsth.util;

import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.EntityBuilder;
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.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * Created by panzhao on 2017/8/2.
 */
public class HttpClientUtils {

    static Logger logger = LoggerFactory.getLogger(HttpClientUtils.class);

    private final static String HTTPS = "https://";

    private static SSLConnectionSocketFactory sslConnectionSocketFactory;

    static {
        try {
            SSLContext sslCtx = SSLContext.getInstance("TLSv1.2");
            sslCtx.init(null, new TrustManager[] {
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                        }

                        @Override
                        public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                        }

                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return null;
                        }
                    }
            }, null);
            sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslCtx, new HostnameVerifier() {

                @Override
                public boolean verify(String hostname, SSLSession session) {
                    // TODO Auto-generated method stub
                    return true;
                }
            });
        } catch (Exception e) {
            logger.error("SSL context set fail: {}", e);
        }
    }

    public static CloseableHttpClient defaultHttpClient(String url) {
        if (url.startsWith(HTTPS)) {
            return HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory).build();
        }
        return HttpClients.createDefault();
    }

    public static StringBuilder get(String url) throws Exception {

        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        StringBuilder stringBuffer = null;
        try {
            httpClient = HttpClients.createDefault();
            HttpGet get = new HttpGet(url);
            //超时时间
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectTimeout(10500).setConnectionRequestTimeout(7000)
                    .setSocketTimeout(10500).build();
            get.setConfig(requestConfig);
            get.addHeader("Content-Encoding", "gzip");
            response = httpClient.execute(get);
            stringBuffer = getResult(response.getEntity());
        } catch (Exception e) {
            logger.error("", e);
        } finally {
            if (null != httpClient)
                httpClient.close();
            if (null != response)
                response.close();
        }
        return stringBuffer;
    }

    /**
     * raw post data
     * @param url
     * @param data
     * @return
     */
    public static StringBuilder post(String url, String data) throws Exception {
        CloseableHttpClient httpClient = null;
        CloseableHttpResponse response = null;
        StringBuilder stringBuffer = null;
        try {
            httpClient = HttpClients.createDefault();
            HttpPost post = new HttpPost(url);

            post.setHeader("Accept", "application/json");
            post.setHeader("Content-Type", "application/json;charset=UTF-8");
            //超时时间
            RequestConfig requestConfig = RequestConfig.custom()
                    .setConnectTimeout(2500).setConnectionRequestTimeout(2000)
                    .setSocketTimeout(3500).build();
            post.setConfig(requestConfig);
            post.setEntity((new StringEntity(data, "UTF-8")));

            response = httpClient.execute(post);
            stringBuffer = getResult(response.getEntity());
        } catch (Exception e) {
            logger.error("", e);
        } finally {
            if (null != httpClient)
                httpClient.close();
            if (null != response)
                response.close();
        }
        return stringBuffer;
    }

    private static StringBuilder getResult(HttpEntity entity) throws IOException {
        StringBuilder stringBuffer = null;
        if (null != entity) {
            BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));
            stringBuffer = new StringBuilder();
            String str = "";
            while ((str = br.readLine()) != null)
                stringBuffer.append(str);
        }
        return stringBuffer;
    }
}