• [JAVA] HTTP请求,返回响应内容,实例及应用


    JDK 中提供了一些对无状态协议请求(HTTP )的支持,下面我就将我所写的一个小例子(组件)进行描述:

    首先让我们先构建一个请求类(HttpRequester )。

    该类封装了 JAVA 实现简单请求的代码,如下:

    import java.io.BufferedReader;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import java.io.InputStreamReader;  
    import java.net.HttpURLConnection;  
    import java.net.URL;  
    import java.nio.charset.Charset;  
    import java.util.Map;  
    import java.util.Vector;  
       
    /** 
     * HTTP请求对象 
     *  
     * @author YYmmiinngg 
     */  
    public class HttpRequester {  
        private String defaultContentEncoding;  
       
        public HttpRequester() {  
            this.defaultContentEncoding = Charset.defaultCharset().name();  
        }  
       
        /** 
         * 发送GET请求 
         *  
         * @param urlString 
         *            URL地址 
         * @return 响应对象 
         * @throws IOException 
         */  
        public HttpRespons sendGet(String urlString) throws IOException {  
            return this.send(urlString, "GET", null, null);  
        }  
       
        /** 
         * 发送GET请求 
         *  
         * @param urlString 
         *            URL地址 
         * @param params 
         *            参数集合 
         * @return 响应对象 
         * @throws IOException 
         */  
        public HttpRespons sendGet(String urlString, Map<String, String> params)  
                throws IOException {  
            return this.send(urlString, "GET", params, null);  
        }  
       
        /** 
         * 发送GET请求 
         *  
         * @param urlString 
         *            URL地址 
         * @param params 
         *            参数集合 
         * @param propertys 
         *            请求属性 
         * @return 响应对象 
         * @throws IOException 
         */  
        public HttpRespons sendGet(String urlString, Map<String, String> params,  
                Map<String, String> propertys) throws IOException {  
            return this.send(urlString, "GET", params, propertys);  
        }  
       
        /** 
         * 发送POST请求 
         *  
         * @param urlString 
         *            URL地址 
         * @return 响应对象 
         * @throws IOException 
         */  
        public HttpRespons sendPost(String urlString) throws IOException {  
            return this.send(urlString, "POST", null, null);  
        }  
       
        /** 
         * 发送POST请求 
         *  
         * @param urlString 
         *            URL地址 
         * @param params 
         *            参数集合 
         * @return 响应对象 
         * @throws IOException 
         */  
        public HttpRespons sendPost(String urlString, Map<String, String> params)  
                throws IOException {  
            return this.send(urlString, "POST", params, null);  
        }  
       
        /** 
         * 发送POST请求 
         *  
         * @param urlString 
         *            URL地址 
         * @param params 
         *            参数集合 
         * @param propertys 
         *            请求属性 
         * @return 响应对象 
         * @throws IOException 
         */  
        public HttpRespons sendPost(String urlString, Map<String, String> params,  
                Map<String, String> propertys) throws IOException {  
            return this.send(urlString, "POST", params, propertys);  
        }  
       
        /** 
         * 发送HTTP请求 
         *  
         * @param urlString 
         * @return 响映对象 
         * @throws IOException 
         */  
        private HttpRespons send(String urlString, String method,  
                Map<String, String> parameters, Map<String, String> propertys)  
                throws IOException {  
            HttpURLConnection urlConnection = null;  
       
            if (method.equalsIgnoreCase("GET") && parameters != null) {  
                StringBuffer param = new StringBuffer();  
                int i = 0;  
                for (String key : parameters.keySet()) {  
                    if (i == 0)  
                        param.append("?");  
                    else  
                        param.append("&");  
                    param.append(key).append("=").append(parameters.get(key));  
                    i++;  
                }  
                urlString += param;  
            }  
            URL url = new URL(urlString);  
            urlConnection = (HttpURLConnection) url.openConnection();  
       
            urlConnection.setRequestMethod(method);  
            urlConnection.setDoOutput(true);  
            urlConnection.setDoInput(true);  
            urlConnection.setUseCaches(false);  
       
            if (propertys != null)  
                for (String key : propertys.keySet()) {  
                    urlConnection.addRequestProperty(key, propertys.get(key));  
                }  
       
            if (method.equalsIgnoreCase("POST") && parameters != null) {  
                StringBuffer param = new StringBuffer();  
                for (String key : parameters.keySet()) {  
                    param.append("&");  
                    param.append(key).append("=").append(parameters.get(key));  
                }  
                urlConnection.getOutputStream().write(param.toString().getBytes());  
                urlConnection.getOutputStream().flush();  
                urlConnection.getOutputStream().close();  
            }  
       
            return this.makeContent(urlString, urlConnection);  
        }  
       
        /** 
         * 得到响应对象 
         *  
         * @param urlConnection 
         * @return 响应对象 
         * @throws IOException 
         */  
        private HttpRespons makeContent(String urlString,  
                HttpURLConnection urlConnection) throws IOException {  
            HttpRespons httpResponser = new HttpRespons();  
            try {  
                InputStream in = urlConnection.getInputStream();  
                BufferedReader bufferedReader = new BufferedReader(  
                        new InputStreamReader(in));  
                httpResponser.contentCollection = new Vector<String>();  
                StringBuffer temp = new StringBuffer();  
                String line = bufferedReader.readLine();  
                while (line != null) {  
                    httpResponser.contentCollection.add(line);  
                    temp.append(line).append("
    ");  
                    line = bufferedReader.readLine();  
                }  
                bufferedReader.close();  
       
                String ecod = urlConnection.getContentEncoding();  
                if (ecod == null)  
                    ecod = this.defaultContentEncoding;  
       
                httpResponser.urlString = urlString;  
       
                httpResponser.defaultPort = urlConnection.getURL().getDefaultPort();  
                httpResponser.file = urlConnection.getURL().getFile();  
                httpResponser.host = urlConnection.getURL().getHost();  
                httpResponser.path = urlConnection.getURL().getPath();  
                httpResponser.port = urlConnection.getURL().getPort();  
                httpResponser.protocol = urlConnection.getURL().getProtocol();  
                httpResponser.query = urlConnection.getURL().getQuery();  
                httpResponser.ref = urlConnection.getURL().getRef();  
                httpResponser.userInfo = urlConnection.getURL().getUserInfo();  
       
                httpResponser.content = new String(temp.toString().getBytes(), ecod);  
                httpResponser.contentEncoding = ecod;  
                httpResponser.code = urlConnection.getResponseCode();  
                httpResponser.message = urlConnection.getResponseMessage();  
                httpResponser.contentType = urlConnection.getContentType();  
                httpResponser.method = urlConnection.getRequestMethod();  
                httpResponser.connectTimeout = urlConnection.getConnectTimeout();  
                httpResponser.readTimeout = urlConnection.getReadTimeout();  
       
                return httpResponser;  
            } catch (IOException e) {  
                throw e;  
            } finally {  
                if (urlConnection != null)  
                    urlConnection.disconnect();  
            }  
        }  
       
        /** 
         * 默认的响应字符集 
         */  
        public String getDefaultContentEncoding() {  
            return this.defaultContentEncoding;  
        }  
       
        /** 
         * 设置默认的响应字符集 
         */  
        public void setDefaultContentEncoding(String defaultContentEncoding) {  
            this.defaultContentEncoding = defaultContentEncoding;  
        }  
    }

    其次我们来看看响应对象(HttpRespons )。 响应对象其实只是一个数据BEAN ,由此来封装请求响应的结果数据,如下:

    import java.util.Vector;  
           
        /** 
         * 响应对象 
         */  
        public class HttpRespons {  
           
            String urlString;  
           
            int defaultPort;  
           
            String file;  
           
            String host;  
           
            String path;  
           
            int port;  
           
            String protocol;  
           
            String query;  
           
            String ref;  
           
            String userInfo;  
           
            String contentEncoding;  
           
            String content;  
           
            String contentType;  
           
            int code;  
           
            String message;  
           
            String method;  
           
            int connectTimeout;  
           
            int readTimeout;  
           
            Vector<String> contentCollection;  
           
            public String getContent() {  
                return content;  
            }  
           
            public String getContentType() {  
                return contentType;  
            }  
           
            public int getCode() {  
                return code;  
            }  
           
            public String getMessage() {  
                return message;  
            }  
           
            public Vector<String> getContentCollection() {  
                return contentCollection;  
            }  
           
            public String getContentEncoding() {  
                return contentEncoding;  
            }  
           
            public String getMethod() {  
                return method;  
            }  
           
            public int getConnectTimeout() {  
                return connectTimeout;  
            }  
           
            public int getReadTimeout() {  
                return readTimeout;  
            }  
           
            public String getUrlString() {  
                return urlString;  
            }  
           
            public int getDefaultPort() {  
                return defaultPort;  
            }  
           
            public String getFile() {  
                return file;  
            }  
           
            public String getHost() {  
                return host;  
            }  
           
            public String getPath() {  
                return path;  
            }  
           
            public int getPort() {  
                return port;  
            }  
           
            public String getProtocol() {  
                return protocol;  
            }  
           
            public String getQuery() {  
                return query;  
            }  
           
            public String getRef() {  
                return ref;  
            }  
           
            public String getUserInfo() {  
                return userInfo;  
            }  
           
        }

    最后,让我们写一个应用类,测试以上代码是否正确

    import com.yao.http.HttpRequester;  
    import com.yao.http.HttpRespons;  
           
        public class Test {  
            public static void main(String[] args) {  
                try {  
                    HttpRequester request = new HttpRequester();  
                    HttpRespons hr = request.sendGet("http://www.csdn.net");  
           
                    System.out.println(hr.getUrlString());  
                    System.out.println(hr.getProtocol());  
                    System.out.println(hr.getHost());  
                    System.out.println(hr.getPort());  
                    System.out.println(hr.getContentEncoding());  
                    System.out.println(hr.getMethod());  
                      
                    System.out.println(hr.getContent());  
           
                } catch (Exception e) {  
                    e.printStackTrace();  
                }  
            }  
        }

    --------------------------------------

    欢迎您,进入 我系程序猿 的cnBlog博客。

    你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。

    You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.

    --------------------------------------

    分享到QQ空间  

  • 相关阅读:
    爱奇艺RN低代码引擎:千变万化、快速搭建的万花筒
    前端性能优化实战 https://mp.weixin.qq.com/s/amaR6GJFqhW3B9TspBLWJA
    递归 回文链表
    字节跳动自研高性能微服务框架 Kitex 的演进之旅 https://mp.weixin.qq.com/s/DhraH24FuojgW26M8KdODQ
    Cigarette smokers problem
    万字长文 | 十个模型,总结产品经理沟通方法论 https://mp.weixin.qq.com/s/cfAVn1dIk8eg1ushxd0sA
    贪心 Partition Labels
    rune
    层层剖析一次 HTTP POST 请求事故
    runtime: shrink map as elements are deleted 缩容 垃圾回收 GC 内存
  • 原文地址:https://www.cnblogs.com/jqmtony/p/3711232.html
Copyright © 2020-2023  润新知