HttpComponents入门实例

本文将简单介绍 HttpComponents 组件的构成,以及如何简单实用该组件。

超文本传输协议(http)是目前互联网上极其普遍的传输协议,它为构建功能丰富,绚丽多彩的网页提供了强大的支持。构建一个网站,通常无需直接操作 http 协议,目前流行的 WEB 框架已经透明的将这些底层功能封装的很好了。

除了作为网站系统的底层支撑,http 同样可以在其它的一些场景中使用,如游戏服务器和客户端的传输协议、web service、 网络爬虫、HTTP代理、网站后台数据接口等。

Http Components 对 HTTP 底层协议进行了很好的封装。

HttpComponents 组件结构

HttpComponents Core

HttpComponents Core 简称 HttpCore, 是一组底层 Http 传输协议组件,支持两种 I/O 模型,阻塞 I/O 模型和和非阻塞 I/O 模型。上层组件(HttpComponents Client, HttpComponents AsyncClient)依赖此组件实现数据传输。

阻塞 I/O 模型基于基本的 JAVA I/O 实现,非阻塞模型基于 JAVA NIO 实现。

HttpComponents Client

HttpComponents Client 建立在 HttpCore 之上的 Http 客户端管理组件。底层基于 HttpCore 阻塞I/O。从 Commons HttpClient 3.x 继承而来,Commons HttpClient 原来是 apache commons 组建的一部分,现在被 HttpComponents Client 所替代了。

原始的 Commons HttpClient 3.x 可以在 https://hc.apache.org/httpclient-legacy/index.html 找到。如下图:

HttpComponents入门实例

HttpComponents AsyncClient

HttpComponents AsyncClient 建立在 HttpCore NIO 模型之上的 Http 客户端,与基于阻塞 I/O 的 HttpComponents Client 形成互补,由于底层使用的 NIO 非阻塞模型,所以适用于高性能的应用场景。

开始使用 HttpComponents 组件

首先打开 https://hc.apache.org/,点击左侧的 Download 链接,进入下载页面,下载最新版本的 HttpComponents。如下图:

HttpComponents入门实例

在下载页面选择你需要下载的版本。将下载的压缩包进行解压,lib 目录下是 HttpComponents 和它依赖的类库,将它们放到你的工程 classpath 中,如果依赖文件已经存在了,不要放置多份,以免类库之间的冲突。如下图:

HttpComponents入门实例

然后需要检查一下工程的 classpath 中是否存在 commons http 包。Commons http 与 HttpComponents 是完全两个东西,HttpComponents 中的 Client 是从 Commons http 继承而来的,所以很多类名是相同的。为了避免出现莫名奇妙的问题,应将 Commons http 从工程中删除(当然,如果你认为自己足够聪明,也可以在引用java包时小心区分)。

HttpComponents 实例

下面实例将通过 Get 方法请求 https://www.hxstrive.com 网址的内容,将内容输出到控制条。代码如下:

package com.huangx.httpcomponents;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 * 使用 HttpComponents 发起 GET 请求
 * @author huangxin 2019/12/2
 */
public class GetDemo {

    public static void main(String[] args) throws Exception {
        // (1) 创建HttpGet实例
        HttpGet get = new HttpGet("https://www.hxstrive.com");

        // (2) 使用HttpClient发送get请求,获得返回结果HttpResponse
        HttpClient http = new DefaultHttpClient();
        HttpResponse response = http.execute(get);

        // (3) 读取返回结果
        if (response.getStatusLine().getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();
            InputStream in = entity.getContent();

            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            reader.close();
        }
    }

}
尺有所短;寸有所长。物有所不足;智有所不明。——屈原《卜居》
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号