Forest,这款轻量级 HTTP 客户端 API 框架很强( 二 )


(7)过滤器: 用于动态过滤和处理传入 HTTP 请求的相关数据 。
(8)SSL: Forest 支持单向和双向验证的 HTTPS 请求,此模块用于处理 SSL 相关协议的内容
后端部分:后端为实际执行 HTTP 请求发送过程的第三方 HTTP API,目前支持okHttp3和httpclient两种后端 API
Spring Boot Starter Forest:提供对Spring Boot的支持
二、HttpClientHTTP 协议可能是现在 Inte.NET 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源 。
虽然JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活 。HttpClient用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议的最新版本 。
最初,HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议 。
如今,Apache Jakarta Commons HttpClient项目已经寿终正寝,不再开发和维护 。取而代之的是Apache Httpcomponents项目,它包括HttpClient和HttpCore两大模块,能提供更好的性能和更大的灵活性 。扩展:最全的java面试题库
2.1 主要功能HttpClient 提供的主要的功能:

  • 实现了所有HTTP的方法(GET、POST、PUT、HEAD等)
  • 支持自动转向
  • 支持 HTTPS 协议
  • 支持代理服务器
  • ······
2.2 使用方法使用HttpClient发送请求和接收响应一般分为以下几步:
(1)创建HttpClient对象;
(2)创建请求方法的实例,并指定请求URL 。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象;
(3)如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数;
(4)调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse;
(5)调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容,程序可通过该对象获取服务器的响应内容;
(6)释放连接 。无论执行方法是否成功,都必须释放连接 。
三、Okhttp3.1 Okhttp简介Okhttp作为目前Android使用最为广泛的网络框架之一,是一个高效的HTTP Client,其高效性体现在:
  • 支持Spdy、Http1.X、Http2、Quic以及WebSocket
  • 连接池复用底层TCP(Socket),减少请求延时
  • 无缝的支持GZIP减少数据流量
  • 缓存响应数据减少重复的网络请求
  • 请求失败自动重试主机的其他ip,自动重定向
  • ······
3.2 Okhttp请求机制首先来了解下HTTP client、request、response 。HTTP client的作用是接受request请求并返回response信息 。request请求通常包含一个 URL,一个方法 (比如GET/POST),以及一个headers列表,还可能包含一个body(特定内容类型的数据流) 。response则通常用响应代码(比如200表示成功,404表示未找到)、headers和可选的body来响应request请求 。
Okhttp的请求机制,可以概括为以下流程:
(1)通过OkhttpClient创建一个Call,发起同步或异步请求;
(2)okhttp通过Dispatcher对所有的RealCall(Call的具体实现类)进行统一管理,并通过execute()及enqueue()方法对同步或异步请求进行处理;
(3)execute()及enqueue()这两个方法会最终调用RealCall中的getResponseWithInterceptorChain()方法,从拦截器链中获取返回结果;
(4)拦截器链中,依次通过RetryAndFollowUpInterceptor(重定向拦截器)、BridgeInterceptor(桥接拦截器)、CacheInterceptor(缓存拦截器)、ConnectInterceptor(连接拦截器)、CallServerInterceptor(网络拦截器)对请求依次处理,与服务器建立连接后,获取返回数据,再经过上述拦截器依次 处理后,最后将结果返回给调用方 。具体过程如下图所示:
Forest,这款轻量级 HTTP 客户端 API 框架很强

文章插图
 
3.3 具体架构图
Forest,这款轻量级 HTTP 客户端 API 框架很强

文章插图
 


推荐阅读