httpclient4.5基本使用

使用示例

maven依赖:


    org.apache.httpcomponents
    httpclient
    4.5.5

执行连接请求示例:

        // httpclient客户端,类似于一个浏览器,可以由这个客户端执行http请求
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 请求
        HttpGet httpGet = new HttpGet("https://www.jianshu.com/");
        // 响应
        CloseableHttpResponse response = null;
        try {
            // execute()执行成功会返回HttpResponse响应
            response = httpClient.execute(httpGet);
            // 响应体
            HttpEntity responseEntity = response.getEntity();
            System.out.println("响应状态:" + response.getStatusLine());
            // gzip,deflate,compress
            System.out.println("响应体编码方式:" + responseEntity.getContentEncoding());
            // 响应类型如text/html charset也有可能在ContentType中
            System.out.println("响应体类型:" + responseEntity.getContentType());
            /**
             *  EntityUtils.toString()方法会将响应体的输入流关闭,相当于消耗了响应体,
             *  此时连接会回到httpclient中的连接管理器的连接池中,如果下次访问的路由
             *  是一样的(如第一次访问https://www.jianshu.com/,第二次访问
             *  https://www.jianshu.com/search?q=java&page=1&type=note),
             *  则此连接可以被复用。
             */

            System.out.println("响应体内容:" + EntityUtils.toString(responseEntity));
            // 如果关闭了httpEntity的inputStream,httpEntity长度应该为0,而且再次请求相同路由的连接可以共用一个连接。
            // 可以通过设置连接管理器最大连接为1来验证。 
            response = httpClient.execute(httpGet);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    // 关闭连接,则此次连接被丢弃
                    response.close();
                }
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

创建默认的CloseableHttpClient实例中有一个连接管理器,最大连接数为20,每个路由最大连接数为2。因为有了连接管理器对连接的管理,我们可以放心的使用多线程来执行请求,可以有多个HttpClient(我觉得没有很大必要),但是必须将他们设置成同一个连接管理器,才能达到共用连接的目的。

参考文章:

Apache原文连接

原文翻译

你可能感兴趣的:(httpclient4.5基本使用)