简单工具类

写作初衷:由于日常开发经常需要用到很多工具类,经常根据需求自己写也比较麻烦
网上好了一些工具类例如commom.lang3或者hutool或者Jodd这样的开源工具,但是
发现他们之中虽然设计不错,但是如果我想要使用,就必须要引入依赖并且去维护依赖,有些
甚至会有存在版本编译不通过问题,故此想要写作一个每个类都可以作为独立工具类使用
每个使用者只需要复制该类,到任何项目当中都可以使用,所以需要尊从以下两个原则才能
做到.在此诚邀各位大佬参与.可以把各自用过的工具,整合成只依赖JDK,每个类都能够单独
使用的工具.每个人当遇到业务需求需要使用的时候,只需要到这里单独拷贝一个即可使用.
抛弃传统的需要引入依赖的烦恼.让大家一起来解决你所面临的业务问题吧!

介绍

遵从两大原则

  • 1.绝不依赖JDK以外的源码
  • 2.牺牲代码复用性,每个类都必须是单独的组件,绝不互相引用,做到完全解耦
package *;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ConnectException;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.X509Certificate;

/**
 * @program: simple_tools
 * @description:
 * @author: ChenWenLong
 * @create: 2019-10-17 15:50
 **/
public class HttpUtils {

    /**
     * 功能描述:
     * 〈发送get请求,请求参数格式是 name1=value1&name2=value2 的形式。〉
     *
     * @params : [url, param]
     * @return : java.lang.String
     * @author : cwl
     * @date : 2019/10/17 15:53
     */
    public static String sendGet(String url, String param) {
        StringBuilder result = new StringBuilder();
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            URLConnection connection = realUrl.openConnection();
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            connection.connect();
            in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (ConnectException e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param);
        } catch (SocketTimeoutException e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param);
        } catch (IOException e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param);
        } catch (Exception e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param);
        } finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception ex) {
                //此处转成自己的日志记录
                System.out.println("调用in.close Exception, url=" + url + ",param=" + param);
            }
        }
        return result.toString();
    }

    /**
     * 功能描述:
     * 〈发送post请求,请求参数格式是 name1=value1&name2=value2 的形式。〉
     *
     * @params : [url, param]
     * @return : java.lang.String
     * @author : cwl
     * @date : 2019/10/17 15:54
     */
    public static String sendPost(String url, String param) {
        PrintWriter out = null;
        BufferedReader in = null;
        StringBuilder result = new StringBuilder();
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            URLConnection conn = realUrl.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("contentType", "utf-8");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            out = new PrintWriter(conn.getOutputStream());
            out.print(param);
            out.flush();
            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (ConnectException e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param);
        } catch (SocketTimeoutException e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=");
        } catch (IOException e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param);
        } catch (Exception e) {
            //此处转成自己的日志记录
            System.out.println("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param);
        } finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                //此处转成自己的日志记录
                System.out.println("调用in.close Exception, url=" + url + ",param=" + param);
            }
        }
        return result.toString();
    }

    /**
     * 功能描述:
     * 〈发送SSL方式的Post方法 请求参数格式是 name1=value1&name2=value2 的形式〉
     *
     * @params : [url, param]
     * @return : java.lang.String
     * @author : cwl
     * @date : 2019/10/17 16:00
     */
    public static String sendSSLPost(String url, String param) {
        StringBuilder result = new StringBuilder();
        String urlNameString = url + "?" + param;
        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
            URL console = new URL(urlNameString);
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
            conn.setRequestProperty("accept", "*/*");
            conn.setRequestProperty("connection", "Keep-Alive");
            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            conn.setRequestProperty("Accept-Charset", "utf-8");
            conn.setRequestProperty("contentType", "utf-8");
            conn.setDoOutput(true);
            conn.setDoInput(true);

            conn.setSSLSocketFactory(sc.getSocketFactory());
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
            conn.connect();
            InputStream is = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String ret = "";
            while ((ret = br.readLine()) != null) {
                if (ret != null && !ret.trim().equals("")) {
                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
                }
            }
            conn.disconnect();
            br.close();
        } catch (ConnectException e) {
            System.out.println("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param);
        } catch (SocketTimeoutException e) {
            System.out.println("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param);
        } catch (IOException e) {
            System.out.println("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param);
        } catch (Exception e) {
            System.out.println("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param);
        }
        return result.toString();
    }

    private static class TrustAnyTrustManager implements X509TrustManager {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) {
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[]{};
        }
    }

    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }
}