zoukankan      html  css  js  c++  java
  • httpClient连接工具类实测可用

    package com.jeecms.common.util;
    
    import com.google.gson.Gson;
    import com.jeecms.cms.api.Constants;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    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.methods.HttpRequestBase;
    import org.apache.http.conn.ClientConnectionManager;
    import org.apache.http.conn.scheme.Scheme;
    import org.apache.http.conn.scheme.SchemeRegistry;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.entity.mime.HttpMultipartMode;
    import org.apache.http.entity.mime.MultipartEntityBuilder;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.entity.mime.content.StringBody;
    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.message.BasicHeader;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.params.CoreConnectionPNames;
    import org.apache.http.params.HttpParams;
    import org.apache.http.util.EntityUtils;
    import org.apache.http.conn.ssl.SSLSocketFactory;
    import sun.java2d.opengl.OGLContext;
    
    import javax.annotation.Resource;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import java.io.*;
    import java.net.URI;
    import java.nio.charset.Charset;
    import java.util.*;
    import java.util.Map.Entry;
    /**
     * @ Author     :YanTingXiang
     * @ Date       :Created in 2019-06-10
     * @ Description:
     * @Version : 1.0
     */
    @Slf4j
    public class HttpClientUtil {
        @Resource
        private Gson gson;
    
        private static HttpClientUtil instance;
        protected Charset charset;
        private int timeOut=10000;//10s download not set timeout
    
    
        public static DefaultHttpClient getHttpsClient() {
            try {
                SSLContext ctx = SSLContext.getInstance("TLS");
                X509TrustManager tm = new X509TrustManager() {
    
                    public void checkClientTrusted(
                            java.security.cert.X509Certificate[] chain,
                            String authType)
                            throws java.security.cert.CertificateException {
                    }
    
                    public void checkServerTrusted(
                            java.security.cert.X509Certificate[] chain,
                            String authType)
                            throws java.security.cert.CertificateException {
                    }
    
                    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                        return null;
                    }
    
                };
                DefaultHttpClient client = new DefaultHttpClient();
                ctx.init(null, new TrustManager[] { tm }, null);
                SSLSocketFactory ssf = new SSLSocketFactory(ctx);
    
                ClientConnectionManager ccm = client.getConnectionManager();
                SchemeRegistry sr = ccm.getSchemeRegistry();
                // 设置要使用的端口,默认是443
                sr.register(new Scheme("https", 443, ssf));
                return client;
            } catch (Exception ex) {
                return null;
            }
        }
    
        private HttpClientUtil(){}
    
        public static HttpClientUtil getInstance() {
            return getInstance(Charset.defaultCharset());
        }
    
        public static HttpClientUtil getInstance(Charset charset){
            if(instance == null){
                instance = new HttpClientUtil();
            }
            instance.setCharset(charset);
            return instance;
        }
    
        public void setCharset(Charset charset) {
            this.charset = charset;
        }
    
        /**
         * post请求
         */
        public String doPost(String url) throws Exception {
            return doPost(url, null, null);
        }
        public String doPostByHeader(String url,Map<String, String> header) throws Exception {
            return doPost(url, null, header);
        }
        public String doPost(String url, Map<String, Object> params) throws Exception {
            return doPost(url, params, null);
        }
    
        public String doPost(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
            String body = null;
            try {
                // Post请求
                log.debug(" protocol: POST");
                log.debug("      url: " + url);
                HttpPost httpPost = new HttpPost(url.trim());
                RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
                httpPost.setConfig(requestConfig);
                // 设置参数
                if (null != params && !header.isEmpty()){
                    log.debug("   params: " + gson.toJson(params));
                    httpPost.setEntity(new UrlEncodedFormEntity(map2NameValuePairList(params), charset));
                }
                // 设置Header
                if (header != null && !header.isEmpty()) {
                    log.debug("   header: " + header.get(Constants.HEADER_KEY_TOKEN));
                    for (Iterator<Map.Entry<String, String>> it = header.entrySet().iterator(); it.hasNext();) {
                        Map.Entry<String, String> entry = (Entry<String, String>) it.next();
                        httpPost.setHeader(new BasicHeader(entry.getKey(), entry.getValue()));
                    }
                }
                // 发送请求,获取返回数据
                body = execute(httpPost);
            } catch (Exception e) {
                throw e;
            }
            log.debug("   result: " + body);
            return body;
        }
    
        /**
         * postJson请求
         */
        public String doPostJson(String url, Map<String, Object> params) throws Exception {
            return doPostJson(url, params, null);
        }
    
        public String doPostJson(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
            String json = null;
            if (params != null && !params.isEmpty()) {
                for (Iterator<Entry<String, Object>> it = params.entrySet().iterator(); it.hasNext();) {
                    Map.Entry<String, Object> entry = (Entry<String, Object>) it.next();
                    Object object = entry.getValue();
                    if (object == null) {
                        it.remove();
                    }
                }
                json = gson.toJson(params);
                //json = JSON.toJSON(params);
            }
            return postJson(url, json, header);
        }
    
        public String doPostJson(String url, String json) throws Exception {
            return doPostJson(url, json, null);
        }
    
        public String doPostJson(String url, String json, Map<String, String> header) throws Exception {
            return postJson(url, json, header);
        }
    
        private String postJson(String url, String json, Map<String, String> header) throws Exception {
            String body = null;
            try {
                // Post请求
                log.debug(" protocol: POST");
                log.debug("      url: " + url);
                HttpPost httpPost = new HttpPost(url.trim());
                RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
                httpPost.setConfig(requestConfig);
                // 设置参数
                log.debug("   params: " + json);
                StringEntity entity = new StringEntity(json, ContentType.DEFAULT_TEXT.withCharset(charset));
                httpPost.setEntity(entity);
                httpPost.setHeader(new BasicHeader("Content-Type", "application/json"));
                log.debug("     type: JSON");
                // 设置Header
                if (header != null && !header.isEmpty()) {
                    log.debug("   header: " + gson.toJson(header));
                    for (Iterator<Entry<String, String>> it = header.entrySet().iterator(); it.hasNext();) {
                        Map.Entry<String, String> entry = (Entry<String, String>) it.next();
                        httpPost.setHeader(new BasicHeader(entry.getKey(), entry.getValue()));
                    }
                }
                // 发送请求,获取返回数据
                body = execute(httpPost);
            } catch (Exception e) {
                throw e;
            }
            log.debug("  result: " + body);
            return body;
        }
    
        /**
         * get请求
         */
        public String doGet(String url) throws Exception {
            return doGet(url, null, null);
        }
    
        public String doGet(String url, Map<String, String> header) throws Exception {
            return doGet(url, null, header);
        }
    
        public String doGet(String url, Map<String, Object> params, Map<String, String> header) throws Exception {
            String body = null;
            try {
                // Get请求
                log.debug("protocol: GET");
                HttpGet httpGet = new HttpGet(url.trim());
                RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeOut) .setConnectTimeout(timeOut).setSocketTimeout(timeOut).build();
                httpGet.setConfig(requestConfig);
                // 设置参数
                if (params != null && !params.isEmpty()) {
                    String str = EntityUtils.toString(new UrlEncodedFormEntity(map2NameValuePairList(params), charset));
                    String uri = httpGet.getURI().toString();
                    if(uri.indexOf("?") >= 0){
                        httpGet.setURI(new URI(httpGet.getURI().toString() + "&" + str));
                    }else {
                        httpGet.setURI(new URI(httpGet.getURI().toString() + "?" + str));
                    }
                }
                log.debug("     url: " + httpGet.getURI());
                // 设置Header
                if (header != null && !header.isEmpty()) {
                    log.debug("   header: " + header);
                    for (Iterator<Entry<String, String>> it = header.entrySet().iterator(); it.hasNext();) {
                        Map.Entry<String, String> entry = (Entry<String, String>) it.next();
                        httpGet.setHeader(new BasicHeader(entry.getKey(), entry.getValue()));
                    }
                }
                // 发送请求,获取返回数据
                body =  execute(httpGet);
            } catch (Exception e) {
                throw e;
            }
            log.debug("  result: " + body);
            return body;
        }
    
        /**
         * 下载文件
         */
        public void doDownload(String url, String path) throws Exception {
            download(url, null, path);
        }
    
        public void doDownload(String url, Map<String, Object> params, String path) throws Exception {
            download(url, params, path);
        }
    
        /**
         * 上传文件
         */
        public String doUpload(String url, String name, String path) throws Exception {
            Map<String, Object> params = new HashMap<String, Object>();
            params.put(name, new File(path));
            return doUpload(url, params);
        }
    
        public String doUpload(String url, Map<String, Object> params) throws Exception {
            String body = null;
            // Post请求
            HttpPost httpPost = new HttpPost(url.trim());
            // 设置参数
            MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
            entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
            entityBuilder.setCharset(charset);
            if (params != null && !params.isEmpty()) {
                Iterator<String> it = params.keySet().iterator();
                while (it.hasNext()) {
                    String key = it.next();
                    Object value = params.get(key);
                    if (value instanceof File) {
                        FileBody fileBody = new FileBody((File) value);
                        entityBuilder.addPart(key, fileBody);
                    } else {
                        entityBuilder.addPart(key, new StringBody(String.valueOf(value), ContentType.DEFAULT_TEXT.withCharset(charset)));
                    }
                }
            }
            HttpEntity entity = entityBuilder.build();
            httpPost.setEntity(entity);
            // 发送请求,获取返回数据
            body = execute(httpPost);
            return body;
        }
    
        private void download(String url, Map<String, Object> params, String path) throws Exception {
            // Get请求
            HttpGet httpGet = new HttpGet(url.trim());
            if (params != null && !params.isEmpty()) {
                // 设置参数
                String str = EntityUtils.toString(new UrlEncodedFormEntity(map2NameValuePairList(params)));
                String uri = httpGet.getURI().toString();
                if (uri.indexOf("?") >= 0) {
                    httpGet.setURI(new URI(httpGet.getURI().toString() + "&" + str));
                } else {
                    httpGet.setURI(new URI(httpGet.getURI().toString() + "?" + str));
                }
            }
            // 发送请求,下载文件
            downloadFile(httpGet, path);
        }
    
        private void downloadFile(HttpRequestBase requestBase, String path) throws Exception {
            CloseableHttpClient httpclient = HttpClients.createDefault();
            try {
                CloseableHttpResponse response = httpclient.execute(requestBase);
                try {
                    HttpEntity entity = response.getEntity();
    
                    if (entity != null) {
                        byte[] b = EntityUtils.toByteArray(entity);
                        OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(path)));
                        out.write(b);
                        out.flush();
                        out.close();
                    }
                    EntityUtils.consume(entity);
                } catch (Exception e) {
                    throw e;
                } finally {
                    response.close();
                }
            } catch (Exception e) {
                throw e;
            } finally {
                httpclient.close();
            }
        }
    
        private String execute(HttpRequestBase requestBase) throws Exception {
            CloseableHttpClient httpclient = getHttpsClient();
            HttpParams params=httpclient.getParams();
            params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, timeOut);
            params.setParameter(CoreConnectionPNames.SO_TIMEOUT, timeOut);
            String body = null;
            try {
                CloseableHttpResponse response = httpclient.execute(requestBase);
                try {
                    HttpEntity entity = response.getEntity();
    
                    if (entity != null) {
                        body = EntityUtils.toString(entity, charset.toString());
                    }
                    EntityUtils.consume(entity);
                } catch (Exception e) {
                    throw e;
                }finally {
                    response.close();
                }
            } catch (Exception e) {
                throw e;
            } finally {
                httpclient.close();
            }
            return body;
        }
    
        private List<NameValuePair> map2NameValuePairList(Map<String, Object> params) {
            if (params != null && !params.isEmpty()) {
                List<NameValuePair> list = new ArrayList<NameValuePair>();
                Iterator<String> it = params.keySet().iterator();
                while (it.hasNext()) {
                    String key = it.next();
                    if(params.get(key) != null) {
                        String value = String.valueOf(params.get(key));
                        list.add(new BasicNameValuePair(key, value));
                    }
                }
                return list;
            }
            return null;
        }
    
        public void downLoad(String url, String localFileName) {
            DefaultHttpClient httpClient = new DefaultHttpClient();
            OutputStream out = null;
            InputStream in = null;
    
            try {
                HttpGet httpGet = new HttpGet(url);
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity entity = httpResponse.getEntity();
                in = entity.getContent();
    
                long length = entity.getContentLength();
                if (length <= 0) {
                    System.out.println("下载文件不存在!");
                    return;
                }
    
                System.out.println("The response value of token:" + httpResponse.getFirstHeader("token"));
    
                File file = new File(localFileName);
                if(!file.exists()){
                    file.createNewFile();
                }
    
                out = new FileOutputStream(file);
                byte[] buffer = new byte[4096];
                int readLength = 0;
                while ((readLength=in.read(buffer)) > 0) {
                    byte[] bytes = new byte[readLength];
                    System.arraycopy(buffer, 0, bytes, 0, readLength);
                    out.write(bytes);
                }
    
                out.flush();
    
            }catch (Exception e){
                e.printStackTrace();
            }finally{
                try {
                    if(in != null){
                        in.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
                try {
                    if(out != null){
                        out.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    }
  • 相关阅读:
    php -- 魔术方法 之 对象输出 : __toString()
    php -- each()、list()
    php -- 魔术方法、魔术常量 简单介绍
    webbench
    md5sum/opensll md5
    shopt
    MD5
    print显示特定的数据格式
    gdb调试4--回退
    字符串化#、拼接字符##和可变参数宏(...和_ _VA_ARGS_ _)
  • 原文地址:https://www.cnblogs.com/minutes/p/11020186.html
Copyright © 2011-2022 走看看