
工具篇:apache-httpClient 和 jdk11-HttpClient的使用
HttpClient (apache)
apache HttpClient 是 java项目里 较为常用的组件之一;对接外部服务时,各个商家提供的接口是各式各样的,有自己的要求,因此要定制对应的请求客户端。httpClient是一个不错的选择
- apache HttpClient 实现了 HTTP 1.0 和 HTTP 1.1。支持 HTTP 全部的方法(GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE)
○ GET, POST 的实现是继承 HttpRequestBase,HttpRequestBase 实现 HttpUriRequest,HttpUriRequest 继承 HttpRequest;GET, POST 方法对应 java 类的 HttpGet 和 HttpPost
- 支持 TLS,SSL 的 HTTPS。支持多线程操作
- 基于阻塞的 I/0 实现,也就是说使用 HttpClient 的线程会被阻塞
- 头部信息设置
- 证书信息设置
- 缓存 cookie 设置
- RequestConfig 的使用
- HttpEntity 是对《请求或者响应》对象的封装,具体实现类有
○ BasicHttpEntity,InputStreamEntity:操作对象是数据流
○ BufferedHttpEntity:带缓冲区的 HttpEntity,其他HttpEntity的包装类,将内容存入一缓存区 可以重复读
○ FileEntity:文件对应的EntityFileEntity entity = new FileEntity(new File(""), "application/java-achive");
○ StringEntity:字符串 Entity。一般用 json ,text/plain,text/xml 类型的post请求
○ UrlEncodedFormEntity,一般用于 application/x-www-form-urlencoded 类型的post请求
- HttpContext:它是 Http 请求上下文类,如果是同一个上下文,则两次请求间可以共享这个上下文的信息。虽然 HttpClient 本身就具备维护cookies的功能,但 HttpContext 的好处是在于多个 HttpClient 实例之间可以共享 HttpContext
一些建议
- 1 释放资源:读取完响应后,我们需要尽快释放response本身和响应实体本身的流来对资源进行回收
- 2 有时可能需要多次读取返回的响应内容,将响应内容进行缓冲。最简单的方法是用BufferedHttpEntity 类包装原始实体。这会让原始实体的内容被读入内存缓冲区
- 3 HttpClient 的线程安全:使用同一个HttpClient的实例即可做到线程安全,因为 HttpClient 内部就有一个池化机制,支持多线程
- 4 EntityUtils.toString(entity) :把内容转成字符串
CloseableHttpClient 是 HttpClient 的子类。mvn 引入
HttpClient 的API
get 请求
post 请求
文件上传
HttpClient (jdk11)
java.net.http.HttpClient 是 jdk11 中正式启用的一个 http 工具类(在 jdk9 的时候就已经存在),官方想要取代 HttpURLConnection 和 Apache HttpClient 等比较古老的开发工具
HttpClient 的API
- HttpClient.Builder 的 API
- HttpClient 调用 API
HttpRequest 构建的 API
对于请求内容可以使用 BodyPublishers 封装的函数生成
HttpResponse 的API
对于响应的解析读取可以使用 BodyHandlers 或者 BodySubscribers 封装的函数处理
get 请求
post 请求
参考文章
- HttpClient用法--这一篇全了解
- HttpClient详细使用示例
- Java9之HttpClientAPI实战详解
- JDK 之 HttpClient(jdk11)
文章转载自公众号:潜行前行
