JAVA发送HTTP请求,返回HTTP响应内容,应用及实例代码

时间:2022-11-21 07:42:03 

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("\r\n"); 
                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("https://www.jb51.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(); 
        } 
    } 

标签:HTTP,请求,响应
0
投稿

猜你喜欢

  • Java打印出所有的水仙花数的实现代码

    2023-03-06 17:24:22
  • Java基础之数组模拟循环队列

    2022-08-29 12:58:06
  • Java毕业设计实战之仿小米电子产品售卖商城系统的实现

    2022-09-29 10:19:47
  • intellij idea14打包apk文件和查看sha1值

    2022-05-25 13:18:37
  • java的Builder原理和实现详解

    2023-09-11 22:46:01
  • Spring Data Jpa实现分页和排序代码实例

    2021-11-08 01:19:48
  • JDBC+GUI实现简单学生管理系统

    2022-08-21 02:52:00
  • 关于报错IDEA Terminated with exit code 1的解决方法

    2021-06-03 08:33:12
  • 基于Spring@Autowired注解与自动装配详谈

    2022-01-14 09:38:49
  • 基于C#动手实现网络服务器Web Server

    2023-01-21 20:13:28
  • 解决RestTemplate 请求url中包含百分号 会被转义成25的问题

    2022-11-01 22:59:51
  • Java 在游戏中探索数组二维数组

    2023-07-01 10:04:04
  • Android判断设备网络连接状态及判断连接方式的方法

    2023-08-29 16:41:02
  • Android百度地图应用之MapFragment的使用

    2022-07-07 21:16:37
  • Android rom解包打包工具

    2023-09-01 21:49:10
  • 国内分布式框架Dubbo使用详解

    2022-05-10 13:38:27
  • springboot用controller跳转html页面的实现

    2022-08-15 06:57:51
  • C#中AS和IS关键字的用法

    2021-06-12 09:44:53
  • C++日期类计算器的模拟实现举例详解

    2023-05-22 08:27:16
  • Android Handler之消息循环的深入解析

    2022-02-10 20:08:45
  • asp之家 软件编程 m.aspxhome.com