1. 简介

httpclent是java中一个关于http协议的程序包 ,主要适用于java模拟浏览器使用HTTP协议进行通信,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。Http协议是互联网中一个使用最广泛的一个协议。

2. 组成

主要使用有三个部分组成。

  1. httpcomponents  core,主要是由一些低层次的组件构成,实现了Http协议的底层框架,可以用来构成客户端和服务端的http服务。支持阻塞和非阻塞I/O,同时支持java中NIO。
  2. httpcomponents client,是基于core模块构建的http agent,提供一些高级的http服务。
  3. httpcomponents asyncclient,是基于core中NIO方式实现的,用来支持大量并
在实际使用中,我们一般不直接使用core模块,而是使用httpcomponent client模块构建我们的程序。httpclient一般使用流程都是执行一个http请求,然后得到制定服务器的响应response,然后根据响应我们做出响应的处理。
一个典型的例子如下所示
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet("http://localhost/");
CloseableHttpResponse response = httpclient.execute(httpget);
try {<...>
} finally {response.close();
}

3. http 请求(request)

Http请求的格式如下:
<request-line>
<headers>
<blank line>
[<request-body>]

在HTTP请求中,第一行必须是一个请求行(request line),用来说明请求类型、要访问的资源以及使用的HTTP版本。紧接着是一个首部(header)小节,用来说明服务器要使用的附加信息。在首部之后是一个空行,再此之后可以添加任意的其他数据[称之为主体(body)]。
在HTTP中,定义了多种请求类型,通常我们关心的只有GET请求和POST请求。只要在Web浏览器上输入一个URL,浏览器就将基于该URL向服务器发送一个GET请求,以告诉服务器获取并返回什么资源。

Httpclient可以通过BasicHttpRequestl新建一个请求,如下所示
HttpRequest request = new BasicHttpRequest("GET", "/",HttpVersion.HTTP_1_1);
System.out.println(request.getRequestLine().getMethod());
System.out.println(request.getRequestLine().getUri());
System.out.println(request.getProtocolVersion());
System.out.println(request.getRequestLine().toString());
输出
GET
/
HTTP/1.1
GET / HTTP/1.1

HttpClient支持各种请求,GET,HEAD, POST, PUT, DELETE, TRACE and OPTIONS.。对应的各种请求方式为 HttpGet,HttpHead, HttpPost, HttpPut, HttpDelete, HttpTrace, and HttpOptions。
例如get请求方式
HttpGet httpget = new HttpGet("http://www.google.com/search?hl=en&q=httpclient&btnG=Google+Search&aq=f&oq=");

Httpclent提供一个URIBuilder类用来构建一些需要请求的URI;如:

URI uri = new URIBuilder().setScheme("http").setHost("www.google.com").setPath("/search").setParameter("q", "httpclient").setParameter("btnG", "Google Search").setParameter("aq", "f").setParameter("oq", "").build();
HttpGet httpget = new HttpGet(uri);

4. http 响应(Response)

如下所示,HTTP响应的格式与请求的格式十分类似 , 在响应中唯一真正的区别在于第一行中用状态信息代替了请求信息。状态行(status line)通过提供一个状态码来说明所请求的资源情况。:

<status-line>
<headers>
<blank line>
[<response-body>]

可以用BasicHttpResponse构建一个响应。

HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1,
HttpStatus.SC_OK, "OK");
System.out.println(response.getProtocolVersion());
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(response.getStatusLine().getReasonPhrase());
System.out.println(response.getStatusLine().toString());

输出:

HTTP/1.1
200
OK
HTTP/1.1 200 OK

Httpclient4 简介相关推荐

  1. HiveServer2服务简介

    HiveServer2服务简介 HiveServer2 基本概念介绍 hiveserver2的搭建使用 独立hiveserver2模式 共享metastore server的hiveserver2模式 ...

  2. ElasticSearch简介及ElasticSearch部署、原理和使用介绍

    ElasticSearch简介及ElasticSearch部署.原理和使用介绍 第一章:elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式 ...

  3. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  4. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  5. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  6. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  7. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  8. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  9. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  10. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

最新文章

  1. 他十年前的书在前端圈人手一本,豆瓣评分9.1。现在,王者归来了!
  2. 软件测试风险评估分析
  3. ASP.NET 学习笔记_13 viewstate 和 cache
  4. 【配置】固定资产组织结构配置
  5. (Call Stack)
  6. 最新的ndkr20编译c_NDKr20使用clang编译ffmpeg
  7. linux cpu 个数、核心数、线程数
  8. 计算机网络:数据链路层(2):MAC协议
  9. 手提计算机10发现不到打印机,笔记本电脑搜索不到打印机怎么样解决
  10. python实现DES加密解密
  11. 第十六周助教心得体会
  12. 【工作感悟】在一家普通互联网公司实习四个月的总结和感想
  13. java类名不能以数字开头_java变量为什么不能以数字开头
  14. windows设置CPU主频
  15. 满城尽带黄金“假”(二)——断臂殇为谁而鸣
  16. Windows10家庭版 打不开组策略
  17. 诺基亚智能手机未来仅采用Symbian和MeeGo系统
  18. 笑死!程序员延寿指南开源了
  19. 【LoRa网关以及LoRa自组网】以“有人物联网”为例
  20. 如何下载广西壮族自治区卫星地图高清版大图

热门文章

  1. 配置淘宝Maven镜像仓库
  2. 运算放大器仿真 matlab,利用Matlab分析运算放大器电路.doc
  3. 遗传算法原理和Python实现
  4. 最优化理论与方法(袁亚湘 孙文瑜)笔记(二)
  5. 基于STM32设计的宠物投喂器
  6. 在龙芯1c上使用rt-thread统一标准的spi接口
  7. 认识计算机拓扑结构图,认识一下网络拓扑,几张图片几条线。
  8. Unity3D放破解反编译。DLL加密,mono解密。全程详解。
  9. C# panel控件实现鼠标滚轮滚动拖动滚动条
  10. 北京内推 | 微软亚洲研究院视觉计算组招聘研究与开发实习生