zoukankan      html  css  js  c++  java
  • 一个封装的使用Apache HttpClient进行Http请求(GET、POST、PUT等)的类。

    一个封装的使用Apache HttpClient进行Http请求(GET、POST、PUT等)的类。

    import com.qunar.payment.gateway.front.channel.mpgs.po.HttpReqEntity;
    import org.apache.http.HttpHeaders;
    import org.apache.http.auth.AuthScope;
    import org.apache.http.auth.UsernamePasswordCredentials;
    import org.apache.http.client.CredentialsProvider;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPut;
    import org.apache.http.client.methods.HttpUriRequest;
    import org.apache.http.conn.ssl.NoopHostnameVerifier;
    import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.BasicCredentialsProvider;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.springframework.http.HttpMethod;
    
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import java.io.IOException;
    import java.security.KeyManagementException;
    import java.security.NoSuchAlgorithmException;
    import java.security.SecureRandom;
    import java.security.cert.X509Certificate;
    
    /**
     * User:xfyou Date:2017/11/23 10:50
     */
    public class HttpUtil {
        private HttpUtil() {
        }
    
        private static CredentialsProvider credentialsProvider;
        private static final SSLConnectionSocketFactory SOCKET_FACTORY = getSocketFactory();
        private static final NoopHostnameVerifier NO_OP = new NoopHostnameVerifier();
    
        public static String execute(HttpReqEntity httpReqEntity) throws IOException {
            CloseableHttpClient httpclient = getClosableHttpClient(httpReqEntity);
            CloseableHttpResponse response = null;
            try {
                response = httpclient.execute(getHttpUriRequest(httpReqEntity));
                return EntityUtils.toString(response.getEntity());
            } finally {
                try {
                    if (null != response) response.close();
                    if (null != httpclient) httpclient.close();
                } catch (IOException ignored) {
                }
            }
        }
    
        private static TrustManager getTrustManagers() {
            return new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
    
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            };
        }
    
        private static SSLConnectionSocketFactory getSocketFactory() {
            SSLContext sslContext;
            try {
                sslContext = SSLContext.getInstance(MpgsConstant.SECURITYPROTOCOL_VERSION_TLS_1_2);
            } catch (NoSuchAlgorithmException e) {
                return null;
            }
            try {
                sslContext.init(null, new TrustManager[]{getTrustManagers()}, new SecureRandom());
            } catch (KeyManagementException e) {
                return null;
            }
            return new SSLConnectionSocketFactory(sslContext);
        }
    
        private static CloseableHttpClient getClosableHttpClient(HttpReqEntity entity) {
            return HttpClients.custom()
                    .setSSLSocketFactory(SOCKET_FACTORY)
                    .setSSLHostnameVerifier(NO_OP)
                    .setDefaultCredentialsProvider(getCredentialsProvider(entity.getCredUserName(), entity.getCredPasswd()))
                    .build();
        }
    
        private static HttpPut getHttpPut(String requestUrl, String requestMessage, RequestConfig config) {
            HttpPut httpPut = new HttpPut(requestUrl);
            httpPut.setConfig(config);
            httpPut.addHeader(HttpHeaders.CONTENT_TYPE, MpgsConstant.CONTENTTYPE_JSON);
            httpPut.setEntity(new StringEntity(requestMessage, MpgsConstant.CHARSET_UTF8));
            return httpPut;
        }
    
        private static HttpGet getHttpGet(String requestUrl, RequestConfig config) {
            HttpGet httpGet = new HttpGet(requestUrl);
            httpGet.setConfig(config);
            return httpGet;
        }
    
        private static HttpUriRequest getHttpUriRequest(HttpReqEntity entity) {
            return entity.getHttpMethod() == HttpMethod.GET ? getHttpGet(entity.getRequestUrl(), entity.getRequestConfig())
                    : getHttpPut(entity.getRequestUrl(), entity.getRequestMessage(), entity.getRequestConfig());
        }
    
        private static CredentialsProvider getCredentialsProvider(String userName, String passwd) {
            if (null == credentialsProvider) {
                synchronized (HttpUtil.class) {
                    if (null == credentialsProvider) {
                        CredentialsProvider credsProvider = new BasicCredentialsProvider();
                        credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, passwd));
                        credentialsProvider = credsProvider;
                    }
                }
            }
            return credentialsProvider;
        }
    }
  • 相关阅读:
    xdebug安装教程
    如何查看Linux操作系统的位数
    getconf命令【一天一个命令】
    redis 数据类型详解 以及 redis适用场景场合
    Redis和Memcache对比及选择
    无交换机实现集群网络互联
    性能调优攻略
    Chrome 插件集推荐
    在 Linux 下将 PNG 和 JPG 批量互转的四种方法
    Flashback for MySQL 5.7
  • 原文地址:https://www.cnblogs.com/frankyou/p/7942486.html
Copyright © 2011-2022 走看看