【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

简介: 【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )

文章目录

OkHttp 系列文章目录

一、网络框架封装

二、OkHttp 4 迁移

三、OkHttp 建造者模式

四、博客资源





一、网络框架封装


HttpURLConnection 是 Android 中原生的 Http 网络请求 API , 在 SDK 中提供 , 是 Google 官方提供的 Http 网络框架 , 使用起来很繁琐 ;



Http 网络框架的作用是封装 Http 请求 ( Request ) 和 响应 ( Response ) ;


Request 请求封装 : 中封装 请求头 , 参数 , 将下面的参数封装到 Request 请求中 ;


GET / HTTP/1.1
Host: rucfd.ruc.edu.cn
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
If-None-Match: "b7f-5b575595fe630-gzip"
If-Modified-Since: Wed, 02 Dec 2020 06:28:18 GMT



Response 响应封装 : 将 响应头 以及各种响应参数 封装到 Request 响应中 ;


HTTP/1.1 200 OK
Server: none
Date: Mon, 21 Jun 2021 05:15:56 GMT
Content-Type: text/html
Content-Length: 1104
Connection: keep-alive
Last-Modified: Wed, 02 Dec 2020 06:28:18 GMT
ETag: "b7f-5b575595fe630-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip


OkHttp 网络框架就实现了上述封装 , 并且用法更加






二、OkHttp 4 迁移


OkHttp3 使用 Java 实现 , OkHttp4 使用 Kotlin 实现 ;


如果迁移到 OkHttp4 , 原则上不会出现错误 , 二者肯定是兼容的 , 原有代码不用进行修改 ;


还是有一些需要进行兼容的地方 , 参考如下页面 ;


https://square.github.io/okhttp/upgrading_to_okhttp_4/



image.png





三、OkHttp 建造者模式


使用 OkHttp 创建 Request 请求对象时 , 使用到了 " 建造者模式 " ;


Request request = new Request.Builder()

       .url("https://www.baidu.com")   // 设置请求地址

       .get()                          // 使用 Get 方法

       .build();

1

2

3

4

Request 中需要设置很多成员变量需要初始化 , 大部分参数都不是必须的 , 在构造函数中不可能设置十几个甚至几十个参数 ;

因此这里使用 " 建造者设计模式 " , 可以根据自己的需求 , 为类设置一个 " 建造者 " Builder , 用户通过该 Builder 对象根据需求配置不同的参数 ;


在 new Request.Builder() 建造者的构造函数中 , 对 Request 进行了默认初始化操作 ;



Request.Builder 代码示例 :


 public static class Builder {

   @Nullable HttpUrl url;

   String method;

   Headers.Builder headers;

   @Nullable RequestBody body;


   /** A mutable map of tags, or an immutable empty map if we don't have any. */

   Map<Class<?>, Object> tags = Collections.emptyMap();


   public Builder() {

     this.method = "GET";

     this.headers = new Headers.Builder();

   }

 

   Builder(Request request) {

     this.url = request.url;

     this.method = request.method;

     this.body = request.body;

     this.tags = request.tags.isEmpty()

         ? Collections.emptyMap()

         : new LinkedHashMap<>(request.tags);

     this.headers = request.headers.newBuilder();

   }


   public Builder url(HttpUrl url) {

     if (url == null) throw new NullPointerException("url == null");

     this.url = url;

     return this;

   }

 }


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30



目录
相关文章
|
3月前
|
数据采集 存储 数据处理
Scrapy:Python网络爬虫框架的利器
在当今信息时代,网络数据已成为企业和个人获取信息的重要途径。而Python网络爬虫框架Scrapy则成为了网络爬虫工程师的必备工具。本文将介绍Scrapy的概念与实践,以及其在数据采集和处理过程中的应用。
23 1
|
3月前
|
NoSQL Linux Redis
Redis 的网络框架是实现了 Reactor 模型吗?
Redis 的网络框架是实现了 Reactor 模型吗?
|
6月前
|
缓存 网络协议 Dubbo
异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty
异步编程 - 12 异步、基于事件驱动的网络编程框架 Netty
45 0
|
4月前
|
机器学习/深度学习 数据采集 分布式计算
社交网络分析4(下):社交网络链路预测分析、LightGBM框架、LLSLP方法(LightGBM 堆叠链路预测)、堆叠泛化 、社交网络链路预测分析的挑战
社交网络分析4(下):社交网络链路预测分析、LightGBM框架、LLSLP方法(LightGBM 堆叠链路预测)、堆叠泛化 、社交网络链路预测分析的挑战
217 0
|
12天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
存储 设计模式 网络协议
Netty网络框架(一)
Netty网络框架
31 1
|
1月前
|
网络协议 安全 网络安全
网络基础与通信原理:构建数字世界的框架
网络基础与通信原理:构建数字世界的框架
46 1
|
3月前
|
数据采集 存储 机器人
Scrapy网络爬虫框架——从入门到实践
网络爬虫已经成为了信息获取的必备工具之一,而Scrapy作为Python中最流行的网络爬虫框架之一,具有高效、可扩展、易用等特点。本文将深入介绍Scrapy框架的概念和实践,帮助读者快速掌握构建高质量网络爬虫的方法。
58 0
|
3月前
|
数据采集 存储 调度
Scrapy:从入门到实践的网络爬虫框架
Scrapy是一款强大的Python网络爬虫框架,可以帮助开发者更高效地抓取互联网上的数据。本文将介绍Scrapy的概念和基本原理,详细讲解如何使用Scrapy框架实现一个简单的网络爬虫,并分享一些实战经验和技巧。
|
3月前
|
数据采集 存储 调度
Scrapy:高效的Python网络爬虫框架
在信息时代,数据的获取和分析已经成为了一项重要的技能。而网络爬虫则是实现数据采集的一种常用手段。Scrapy作为一个高效、灵活的Python网络爬虫框架,其具备强大的扩展性、高度的可配置性以及良好的兼容性。本文将从Scrapy的概念入手,介绍其基本原理、使用方法以及实际应用案例。

热门文章

最新文章