package org.jeecg.modules.apiBean;




import com.alibaba.fastjson.JSON;
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.CookieStore;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.*;
import org.apache.http.client.utils.HttpClientUtils;
import org.apache.http.client.utils.URIBuilder;
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.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.net.URI;
import java.nio.charset.Charset;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
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;

/**
 * 通过url获取数据
 *
 * @author zc
 *
 */
public class HttpClientUtil {

    /**
     * 设置可访问https
     * @return
     */
    public static CloseableHttpClient createSSLClientDefault() {
        try {
            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                //信任所有
                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                    return true;
                }
            }).build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

            return HttpClients.custom().setSSLSocketFactory(sslsf).build();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }
        return HttpClients.createDefault();
    }
/*************************************Get**********************************************/
    /**
     * 一般查询用doget
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doGet(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpclient = createSSLClientDefault();//调用createSSLClientDefault
        String resultString = "";
        CloseableHttpResponse response = null;
        try {

            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            CookieStore cookieStore = new BasicCookieStore();
            httpclient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);
            //设置请求头
//			if (parameter != null) {
//				//签名
//				httpGet.addHeader("Sign",parameter.getSign());
//				//用户ID
//				httpGet.addHeader("User_ID",parameter.getUserId()+"");
//				//用户角色ID
//				httpGet.addHeader("User_RID",parameter.getRId());
//				//用户单位ID
//				httpGet.addHeader("Dept_ID",parameter.getDeptId()+"");
//				//用户科室ID
//				httpGet.addHeader("Unit_ID",parameter.getUnitid()+"");
//				httpGet.addHeader("CacheKey",parameter.getCacheKey());
//				httpGet.addHeader("Org_id", parameter.getOrg_id() + "");
//				httpGet.addHeader("Product_id", parameter.getProduct_id() + "");
//                httpGet.addHeader("Timestamp", parameter.getTimestamp());
//			}

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(),
                        "UTF-8");
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet(String url) {
        return doGet(url, null);
    }

    public static String doGet3(String url, Map<String, String> param) {
        // 创建Httpclient对象
        //调用createSSLClientDefault
        CloseableHttpClient httpclient = createSSLClientDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {

            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);
            //设置请求头
//			if (parameter != null) {
//				//签名
//				httpGet.addHeader("Sign",parameter.getSign());
//				//用户ID
//				httpGet.addHeader("User_ID",parameter.getUserId()+"");
//				//用户角色ID
//				httpGet.addHeader("User_RID",parameter.getRId());
//				//用户单位ID
//				httpGet.addHeader("Dept_ID",parameter.getDeptId()+"");
//				//用户科室ID
//				httpGet.addHeader("Unit_ID",parameter.getUnitid()+"");
//				httpGet.addHeader("CacheKey",parameter.getCacheKey());
//				httpGet.addHeader("Org_id", parameter.getOrg_id() + "");
//				httpGet.addHeader("Product_id", parameter.getProduct_id() + "");
//				httpGet.addHeader("Timestamp", parameter.getTimestamp());
//			}

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(),
                        "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    /**
     * 上传文件的doGet
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doGet2(String url, Map<String, String> param) {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = createSSLClientDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {

            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);
//			if (parameter != null) {
//				//用户ID
//				httpGet.addHeader("User_ID",parameter.getUserId()+"");
//				//用户角色ID
//				httpGet.addHeader("User_RID",parameter.getRId());
//				//用户单位ID
//				httpGet.addHeader("Dept_ID",parameter.getDeptId()+"");
//				//用户科室ID
//				httpGet.addHeader("Unit_ID",parameter.getUnitid()+"");
//				httpGet.addHeader("CacheKey",parameter.getCacheKey());
//				httpGet.addHeader("Org_id", parameter.getOrg_id());
//				httpGet.addHeader("Product_id", parameter.getProduct_id());
//				httpGet.addHeader("Sign", parameter.getSign());
//				httpGet.addHeader("requestCode", parameter.getRequestCode());
//				httpGet.addHeader("Content-Type", "application/json;charset=UTF-8");
//				httpGet.addHeader("Timestamp", parameter.getTimestamp());
//			}
            // 执行请求
            response = httpclient.execute(httpGet);
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(),
                        "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet2(String url) {
        return doGet2(url, null);

    }

    public static String doGet4(String url, Map<String, String> param) {
        // 创建Httpclient对象
        //调用createSSLClientDefault
        CloseableHttpClient httpclient = createSSLClientDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {

            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);
            //设置请求头
//			httpGet.addHeader("");
//			if (parameter != null) {
//				//签名
//				httpGet.addHeader("Sign",parameter.getSign());
//				//用户ID
//				httpGet.addHeader("User_ID",parameter.getUserId()+"");
//				//用户角色ID
//				httpGet.addHeader("User_RID",parameter.getRId());
//				//用户单位ID
//				httpGet.addHeader("Dept_ID",parameter.getDeptId()+"");
//				//用户科室ID
//				httpGet.addHeader("Unit_ID",parameter.getUnitid()+"");
//				httpGet.addHeader("CacheKey",parameter.getCacheKey());
//				httpGet.addHeader("Org_id", parameter.getOrg_id() + "");
//				httpGet.addHeader("Product_id", parameter.getProduct_id() + "");
//				httpGet.addHeader("Timestamp", parameter.getTimestamp());
//			}

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(),
                        "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet5(String url, Map<String, String> param) {
        // 创建Httpclient对象
        //调用createSSLClientDefault
        CloseableHttpClient httpclient = createSSLClientDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {

            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);
            //设置请求头
//			httpGet.addHeader("");
//			if (parameter != null) {
//			httpGet.addHeader("Accept","application/json, text/javascript, */*; q=0.01");
//			httpGet.addHeader("Accept-Encoding","gzip, deflate, br");
//			httpGet.addHeader("Accept-Language","zh-CN,zh;q=0.9");
//			httpGet.addHeader("Connection","keep-alive");
            httpGet.addHeader("Cookie","PHPSESSID=b1epvn4gilmvlqd63gb71sgb4m");
//			httpGet.addHeader("Host","www.5577yc.com");
//			httpGet.addHeader("Referer","https://www.5577yc.com/pc/member/index.html");
//			httpGet.addHeader("Sec-Fetch-Mode","cors");
//			httpGet.addHeader("Sec-Fetch-Site","same-origin");
//			httpGet.addHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36");
            httpGet.addHeader("X-Requested-With","XMLHttpRequest");
//				httpGet.addHeader("Org_id", parameter.getOrg_id() + "");
//				httpGet.addHeader("Product_id", parameter.getProduct_id() + "");
//				httpGet.addHeader("Timestamp", parameter.getTimestamp());
//			}

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(),
                        "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet5(String url) {
        return doGet5(url, null);

    }
    /*************************************Get**********************************************/

    /*************************************Post**********************************************/
    /**
     * 原始doPost 基本不用
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doPost(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);

            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
                        paramList);
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);




            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * 项目经常用的doPost2
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doPost2(String url, Map<String, String> param){

        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(uri);
            httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
//			httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }

                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
                        paramList,"UTF-8");
                entity.setContentEncoding("UTF-8");
                entity.setContentType("application/x-www-form-urlencoded");
                httpPost.setEntity(entity);

            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * .net登录post
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doPost3(String url, Map<String, String> param){

        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(uri);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
                        paramList, Charset.forName("UTF-8"));
                entity.setContentEncoding("UTF-8");
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }



    /**
     * 微信文件上传
     * @param url
     * @param content
     * @param fileName
     * @return
     */
    public static String doPost6(String url, byte[] content,String fileName){

        String resultString = null;
        //创建HttpClient
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        org.apache.http.entity.mime.MultipartEntityBuilder builder = org.apache.http.entity.mime.MultipartEntityBuilder.create();
        /*绑定文件参数，传入文件流和contenttype，此处也可以继续添加其他formdata参数*/
        builder.addBinaryBody("file",content, ContentType.MULTIPART_FORM_DATA,fileName);
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
        HttpResponse response = null;
        //执行提交
        try{
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                HttpClientUtils.closeQuietly(httpClient);
                HttpClientUtils.closeQuietly(response);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }


    /**
     * 微信公众号文件上传
     * @param url
     * @param content
     * @param fileName
     * @return
     */
    public static String doPost7(String url, byte[] content,String fileName){

        String resultString = null;
        //创建HttpClient
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        org.apache.http.entity.mime.MultipartEntityBuilder builder = org.apache.http.entity.mime.MultipartEntityBuilder.create();
        /*绑定文件参数，传入文件流和contenttype，此处也可以继续添加其他formdata参数*/
        builder.addBinaryBody("media",content, ContentType.MULTIPART_FORM_DATA,fileName);
        HttpEntity entity = builder.build();
        httpPost.setEntity(entity);
        HttpResponse response = null;
        //执行提交
        try{
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                HttpClientUtils.closeQuietly(httpClient);
                HttpClientUtils.closeQuietly(response);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * 项目经常用的doPost4
     * @param url
     * @param param
     * @return
     */
    public static String doPost4(String url, Map<String, String> param){

        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        StringBuffer cookie = new StringBuffer();
        Map<String, Object> map = new HashMap<>();
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(uri);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                httpPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
                        paramList, Charset.forName("UTF-8"));
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return resultString;
    }


    /**
     * 项目经常用的doPost4
     * @param url
     * @param param
     * @param parameter
     * @return
     */
    public static String doPost5(String url, Map<String, String> param,String parameter){

        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        StringBuffer cookie = new StringBuffer();
        Map<String, Object> map = new HashMap<>();
        try {
            // 创建uri
            CookieStore cookieStore = new BasicCookieStore();
            httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(uri);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                httpPost.addHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                httpPost.addHeader("Host","www.www7945.com");
                httpPost.addHeader("Origin","https://www.www7945.com");
                httpPost.addHeader("Referer","https://www.www7945.com/mobile/");
                httpPost.addHeader("User-Agent:","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
                httpPost.addHeader("Connection","keep-alive");
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
                        paramList, Charset.forName("UTF-8"));
                entity.setContentEncoding("UTF-8");
                httpPost.setEntity(entity);
            }
            if(parameter!=null){
                httpPost.addHeader("Cookie",parameter);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            String tokenStr = null;

            if (response != null) {
                int statusCode = response.getStatusLine().getStatusCode();
                if (statusCode == HttpStatus.SC_OK) {
                    // 获得Cookies
                    List<org.apache.http.cookie.Cookie> cookies = cookieStore.getCookies();
                    for (org.apache.http.cookie.Cookie c : cookies) {
                        cookie.append(c.getName()).append("=").append(c.getValue()).append(";");
                        if (c.getName().contains("token")) {
                            tokenStr = c.getValue();
                        }
                    }
                }
            }
            map.put("token",tokenStr);
            map.put("cookie",cookie.toString());
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            map.put("resultString",JSON.parse(resultString));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        if(parameter!=null){
            return resultString;
        }
        return JSON.toJSONString(map);
    }



    public static String doPost5(String url)  {
        return doPost5(url, null,null);
    }

    public static String doPost4(String url)  {
        return doPost4(url, null);
    }

    public static String doPost2(String url)  {
        return doPost2(url);
    }


    public static String doPost(String url) {
        return doPost(url, null);
    }

    /**
     * 当数据需要以JSON格式传输
     * @param url
     * @param json
     * @param
     * @return
     */
    public static String doPostJson(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json,
                    ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return resultString;
    }


    public static String doPostJson3(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json,
                    ContentType.APPLICATION_FORM_URLENCODED);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return resultString;
    }

    /**
     * 文件上传
     * @param url
     * @param json
     * @param
     * @return
     */
    public static String doPostJson2(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json,
                    ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /*************************************Post**********************************************/








    /*************************************Delete**********************************************/
    /**
     * 原始删除 基本不怎么用
     * @param url
     * @return
     */
    public static String doDelete(String url) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建Http Post请求
            HttpDelete httpPost = new HttpDelete(url);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    /**
     * 常用删除
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doDelete2(String url,Map<String,String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Delete请求
            HttpDelete httpDelete = new HttpDelete(uri);
            // 执行http请求
            response = httpClient.execute(httpDelete);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    /**
     * 上传文件删除
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doDelete3(String url,Map<String,String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Delete请求
            HttpDelete httpDelete = new HttpDelete(uri);
            // 执行http请求
            response = httpClient.execute(httpDelete);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    /*************************************Delete**********************************************/









    /*************************************Put**********************************************/
    public static String doPut(String url) {
        return doPut(url, null);
    }

    /**
     * 修改
     * @param url
     * @param param
     * @param
     * @return
     */
    public static String doPut(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();
            // 创建Http Put请求
            HttpPut httpPut = new HttpPut(uri);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(
                        paramList, Charset.forName("UTF-8"));//Charset.forName("UTF-8")解决乱码
                entity.setContentEncoding("UTF-8");
                httpPut.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPut);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * 以JSON格式修改
     * @param url
     * @param json
     * @param parameter
     * @return
     */
    public static String doPutJson(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createSSLClientDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPut httpPut = new HttpPut(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json,
                    ContentType.APPLICATION_JSON);
            httpPut.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPut);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return resultString;
    }



}

