1. 秦子帅的博客首页
  2. Android

Okhttp3源码解析(2)-Request分析

前言

前面我们讲了
Okhttp的基本用法
Okhttp3源码解析(1)-OkHttpClient分析

今天主要分析下Request源码!

Request初始化

当我们构建完OkHttpClient对象,需要构造Request对象,构造方式如下:

1.Get请求

2.POST请求

拿POST提交表单请求,这时就需要声明一个RequestBody对象了

看到上面代码是不是很熟悉?和OkHttpClient很相似, 没错 Request 的构建也是Builder模式!

Okhttp3源码解析(2)-Request分析

我们点击Request源码进去,果然 其中有静态的Builder内部类:

Okhttp3源码解析(2)-Request分析

然后我们查一下Request在初始化时配置了哪些参数???

从代码看到了 如果没有声明,默认是Get请求 this.method = "GET" ,至于url等字段需要我们自己去配置:

HttpUrl

请求访问的url ,可以传String与URL 具体方法如下:

method

请求类型 String method,支持多种请求类型

Headers

Headers.Builder Http消息的头字段
前面看到了, 我们在初始化Request的时候 同时初始化了headers, this.headers = new Headers.Builder()

可以通过 header addHeader removeHeader headers 方法做一些操作

body

RequestBody类型,它是抽象类, 有些请求需要我们传入body实例 ,我们在通过源码来看一下:
如果是GET请求,body对象传的是null
Get与head方法不能传body对象 ,其他method是可以的

Okhttp3源码解析(2)-Request分析

如果是POST请求,就需要我们去设定了

Okhttp3源码解析(2)-Request分析

RequestBody解析

首先我们看一下RequestBody如何初始化??拿提交表单举例:

不出所料,也是Builder模式,而且RequestBody 是抽象类, FormBodyRequestBody的其中一种实现类 ,另一个实现类是MultipartBody
RequestBody源码如下:

核心方法有三个:

  • contentType()//数据类型
  • contentLength()//数据长度
  • writeTo(BufferedSink sink) //写操作

今天就讲到这里,希望对大家有所帮助…

大家可以关注我的微信公众号:「秦子帅」一个有质量、有态度的公众号!

Okhttp3源码解析(2)-Request分析
公众号

原文始发于:Okhttp3源码解析(2)-Request分析

发布者:秦子帅,转转请注明出处:http://qinzishuai.cn/index.php/2019/08/16/9bb9715b91/

联系我们

912241847

在线咨询:点击这里给我发消息

邮件:qzs531156@163.com

QR code