• 封装HttpUrlConnection开箱即用


    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    因为经常用到 便写出来方边使用 直接复制本类即可

    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.nio.charset.Charset;
    import java.util.HashMap;
    import java.util.Map;
    /**
     * 封装HttpURLConnection开箱即用
     * Create by yster@foxmail.com 2018/9/10/010 19:17
    */public class HttpUtil {
    private HttpURLConnection connection;
    private Charset charset = Charset.forName("UTF-8");
    private int readTimeout = 32000;
    private int connectTimeout = 10000;
    private String method = "GET";
    private boolean doInput = true;
    private Map<String, String> headers = null;
    private String data = null;
    /**
         * 实例化对象
    */
        public static HttpUtil connect(String url) throws IOException {
    return new HttpUtil((HttpURLConnection) new URL(url).openConnection());
        }
    /**
         * 禁止new实例
    */
        private HttpUtil() {
        }
    private HttpUtil(HttpURLConnection connection) {
    this.connection = connection;
        }
    /**
         * 设置读去超时时间/ms
         *
         * @param timeout
    */
        public HttpUtil setReadTimeout(int timeout) {
    this.readTimeout = timeout;
    return this;
        }
    /**
         * 设置链接超时时间/ms
         *
         * @param timeout
    */
        public HttpUtil setConnectTimeout(int timeout) {
    this.connectTimeout = timeout;
    return this;
        }
    /**
         * 设置请求方式
         *
         * @param method
    */
        public HttpUtil setMethod(String method) {
    this.method = method;
    return this;
        }
    /**
         * 添加Headers
         *
         * @param map
    */
        public HttpUtil setHeaders(Map<String, String> map) {
            String cookie = "Cookie";
    if (map.containsKey(cookie)) {
                headers = new HashMap<>();
                headers.put(cookie, map.get(cookie));
            }
    return this;
        }
    /**
         * 是否接受输入流
         * 默认true
         *
         * @param is
    */
        public HttpUtil setDoInput(boolean is) {
    this.doInput = is;
    return this;
        }
    /**
         * 设置请求响应的编码
    */
        public HttpUtil setCharset(String charset) {
    this.charset = Charset.forName(charset);
    return this;
        }
    /**
         * 写入数据,接受Map&lt;String,String&gt;或String类型&lt;br&gt;
         * 例如POST时的参数&lt;br&gt;
         * demo=1&amp;name=2
    */
        public HttpUtil setData(Object object) {
    if (object == null) {
    return this;
            } else if (object instanceof String) {
    this.data = (String) object;
            } else if (object instanceof Map) {
                Map map = (Map) object;
                StringBuilder builder = new StringBuilder();
    for (Object key : map.keySet()) {
                    builder.append(key + "=" + map.get(key) + "&");
                }
    this.data = builder.toString().substring(0, builder.length() > 0 ? builder.length() - 1 : builder.length());
            }
    return this;
        }
    /**
         * 发起请求
    */
        public HttpUtil execute() throws IOException {
    //添加请求头
            if (headers != null) {
    for (String key : headers.keySet()) {
                    connection.setRequestProperty(key, headers.get(key));
                }
            }
    //设置读去超时时间为10秒        connection.setReadTimeout(readTimeout);
    //设置链接超时为10秒        connection.setConnectTimeout(connectTimeout);
    //设置请求方式,GET,POST        connection.setRequestMethod(method.toUpperCase());
    //接受输入流        connection.setDoInput(doInput);
    //写入参数
            if (data != null && !method.equalsIgnoreCase("GET")) {
    //启动输出流,当需要传递参数时需要开启
                connection.setDoOutput(true);
    //添加请求参数,注意:如果是GET请求,参数要写在URL中
                OutputStream output = connection.getOutputStream();
                BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, charset));
    //写入参数 用&amp;分割。            writer.write(data);
                writer.flush();
                writer.close();
            }
    //发起请求        connection.connect();
    return this;
        }
    /**
         * 获取HttpURLConnection
    */
        public HttpURLConnection getConnection() {
    return this.connection;
        }
    /**
         * 获取响应字符串
    */
        public String getBody(String... charsets) {
    //设置编码
            String charset = "UTF-8";
    if (charsets.length > 0) {
                charset = charsets[0];
            }
    //读取输入流
            try {
                InputStream inputStream = connection.getInputStream();
                BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream, charset));
                String line = bufferedReader.readLine();
                StringBuilder builder = new StringBuilder();
    while (line != null) {
                    builder.append(line);
                    line = bufferedReader.readLine();
                }
    return builder.toString();
            } catch (IOException e) {
                e.printStackTrace();
            }
    //失败返回NULL
            return null;
        }
    public static void main(String[] args) throws IOException {
            String body = HttpUtil.connect("http://www.baidu.com")
                    .setMethod("GET")
                    .setCharset("UTF-8")
                    .execute()
                    .getBody();
            System.out.println(body);
        }
    
    }
    

    版权声明

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

  • 相关阅读:
    poj2481 线段树(单点更新)
    二叉查找树 hdu(3791 && 3999)
    计算机科学32个最重要的算法
    03最小路径覆盖问题
    02太空飞行计划问题
    hdu 2448最短路+最佳匹配
    poj1419 最大团
    hdu 3585(二分+最大团)
    hdu 3622 2-SAT
    hdu3592差分约束
  • 原文地址:https://www.cnblogs.com/onblog/p/13035725.html
Copyright © 2020-2023  润新知