简介
HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。
HttpClient最新版本是HttpClient 4.5.3 (GA)。
官方下载:http://hc.apache.org/downloads.cgi
主要特性
- 基于标准、纯净的Java语言,实现了HTTP1.0和HTTP1.1。
- 以可扩展的面向对象的结构实现了HTTP全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
- 支持加密的HTTPS协议(HTTP通过SSL协议)。
- 通过HTTP代理方式建立透明的连接。
- 利用CONNECT方法通过HTTP代理建立隧道的HTTPS连接。
- Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos认证方案。
- 插件式的自定义认证方案。
- 可插拔的安全套接字工厂,使得接入第三方解决方案变得更容易
- 连接管理支持使用多线程的的应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
- 自动化处理Set-Cookie:来自服务器的头,并在适当的时候将它们发送回cookie。
- 可以自定义Cookie策略的插件化机制。
- Request的输出流可以避免流中内容体直接从socket缓冲到服务器。
- Response的输入流可以有效的从socket服务器直接读取相应内容。
- 在HTTP1.0和HTTP1.1中使用用KeepAlive来保持持久连接。
- 可以直接获取服务器发送的响应码和响应头部。
- 具备设置连接超时的能力。
- 支持HTTP/1.1 响应缓存。
- 源代码基于Apache License 可免费获取。
一般使用步骤
使用HttpClient发送请求、接收响应,一般需要以下步骤。
HttpGet请求响应的一般步骤:
1). 创建HttpClient
对象,可以使用HttpClients.createDefault()
;
2). 如果是无参数的GET请求,则直接使用构造方法HttpGet(String url)
创建HttpGet
对象即可;
如果是带参数GET请求,则可以先使用URIBuilder(String url)
创建对象,再调用addParameter(String param, String value)
,或setParameter(String param, String value)
来设置请求参数,并调用build()方法构建一个URI对象。只有构造方法HttpGet(URI uri)
来创建HttpGet对象。
3). 创建HttpResponse
,调用HttpClient
对象的execute(HttpUriRequest request)
发送请求,该方法返回一个HttpResponse
。调用HttpResponse
的getAllHeaders()、getHeaders(String name)
等方法可获取服务器的响应头;调用HttpResponse
的getEntity()
方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。通过调用getStatusLine().getStatusCode()
可以获取响应状态码。
4). 释放连接。
HttpPost请求响应的一般步骤:
1). 创建HttpClient
对象,可以使用HttpClients.createDefault()
;
2). 如果是无参数的GET请求,则直接使用构造方法HttpPost(String url)
创建HttpPost
对象即可;
如果是带参数POST请求,先构建HttpEntity对象并设置请求参数,然后调用setEntity(HttpEntity entity)创建HttpPost对象。
3). 创建HttpResponse
,调用HttpClient
对象的execute(HttpUriRequest request)
发送请求,该方法返回一个HttpResponse
。调用HttpResponse
的getAllHeaders()、getHeaders(String name)
等方法可获取服务器的响应头;调用HttpResponse
的getEntity()
方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。通过调用getStatusLine().getStatusCode()
可以获取响应状态码。
4). 释放连接。
官方文档中的示例
1 //1.获得一个httpclient对象 2 CloseableHttpClient httpclient = HttpClients.createDefault(); 3 //2.生成一个get请求 4 HttpGet httpget = new HttpGet("http://localhost/"); 5 //3.执行get请求并返回结果 6 CloseableHttpResponse response = httpclient.execute(httpget); 7 try { 8 //4.处理结果 9 } finally { 10 response.close(); 11 }
实例代码实战
构建一个Maven项目,引入如下依赖
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.3.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version