HttpClient的使用
HttpClient 4.x API常用方法
HttpClient是由Apache HttpComponents™项目负责创建和维护专注于HTTP和相关协议的低级Java组件工具集。该项目在Apache Software Foundation(http://www.apache.org)下运行,是更大的开发人员和用户社区的一部分。
HttpClient的特性
- 基于标准、纯净的 Java 语言。实现了 HTTP 1.0 和 HTTP 1.1
- 以可扩展的面向对象的结构实现了 HTTP 全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)。
- 支持 HTTPS 协议。
- 通过 HTTP 代理建立透明的连接。
- 利用 CONNECT 方法通过 HTTP 代理建立隧道的 HTTPS 连接。
- Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 认证方案。
- 插件式的自定义认证方案。
- 便携可靠的套接字工厂使它更容易的使用第三方解决方案。
- 连接管理器支持多线程应用。支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
- 自动处理 Set-Cookie 中的 Cookie。
- 插件式的自定义 Cookie 策略。
- Request 的输出流可以避免流中内容直接缓冲到 Socket 服务器。
- Response 的输入流可以有效的从 Socket 服务器直接读取相应内容。
- 在 HTTP 1.0 和 HTTP 1.1 中利用 KeepAlive 保持持久连接。
- 直接获取服务器发送的 response code 和 headers。
- 设置连接超时的能力。
- 实验性的支持 HTTP 1.1 response caching。
- 源代码基于 Apache License 可免费获取。
HttpClient 使用流程
创建
HttpClient
对象1
CloseableHttpClient httpClient = HttpClients.createDefault();
创建请求方法实例,并制定请求
URL
。如果需要发送GET
请求,创建HttpGet
对象,如果需要发送POST
请求,创建HttpPost
对象1
2
3
4
5Get:
HttpGet httpGet = new HttpGet("http://apis.juhe.cn/ip/ipNew?ip=112.112.11.11&key=56e8d1ce739a1016392097d58af41af4");
Post:
HttpPost httpPost = new HttpPost("http://apis.juhe.cn/ip/ipNew");如果要发送请求参数,可调用
HttpGet
、HttpPost
共同的setParams(HttpParams params)
方法来添加请求参数;对于HttpPost
对象而言,也可调用setEntity(HttpEntity entity)
方法来设置请求参数HttpClient提供一个
UrlEncodedFormEntity()
类以方便Post请求传递参数,UrlEncodedFormEntit
继承StringEntity
类,它提供了四个构造函数-
UrlEncodedFormEntity(List<? extends NameValuePair> parameters, String charset)
-
UrlEncodedFormEntity(Iterable<? extends NameValuePair> parameters, Charset charset)
-
UrlEncodedFormEntity(List<? extends NameValuePair> parameters)
-
UrlEncodedFormEntity(Iterable<? extends NameValuePair> parameters)
-
可以通过调用
HttpClient
对象的execute(HttpUriRequest request)
方法来发送请求,这个方法返回一个HttpResponse
调用
HttpResponse
的getAllHeaders()
、getHeaders(String name)
等方法可获得服务器的响应头;调用HttpResponer
的getEntity
方法可获取HttpEntity
对象,该对象包装了服务器的响应内容,可通过该对象获取服务器的响应内容不管执行方法是否成功,都应该释放链接
使用实例
maven依赖如下:
1 | <!-- Apache Http Begin --> |
创建GET请求:
1 | public class MyTest { |
创建POST请求:
1 | public class MyTest { |
封装出的工具类:
1 | import org.apache.commons.lang3.StringUtils; |