OkHttp 的基本使用与请求流程
本文概述
- 文章以具体实例介绍了OkHttp 的直接使用过程并额外说明了OkHttp 的部分自定义功能;
OkHttp 的基本使用
基本说明:
-
一般情况下,不会直接使用OkHttp 完成Http 协议通信
- 因为其功能受限,一般使用Retrofit 等OkHttp 的二次封装框架
具体实例
-
编写思路:
-
实例化okHttpClient:使用建造者设计模式进行选配
-
可选配置:
- 缓存(缓存存放位置,缓存大小)、超时时间、Cookie、自定义分发器、自定义DNS解析
-
示意代码:
var okHttpClient = OkHttpClient.Builder() .cache(Cache(File(""),1024)) .build()
-
-
实例化Request 对象:使用建造者设计模式进行选配
-
必须要配置的:请求的URL
-
选配:请求方式
- get:默认
- post:需要传入请求体
var request = Request.Builder() .url("https://www.baidu.com") .get() .build()
-
-
实例化Call 对象:将request 实例丢给OkHttp 实例
var call = okHttpClient.newCall(request)
-
获取请求结果:可以直接拿到字符串、也可以使用流的方式进行处理
-
同步请求:excute
-
异步请求:enqueue
-
示意图:
-
示意代码:
val result = call.execute()
-
-
可选:打印请求结果
- 示意代码:
println(result.isSuccessful)
-
运行结果:
-
底层原理:根据response 的响应码来判断的
-
isSuccessful
-
isRedirect
-
-
通过响应结果拿到数据
- 可以以字符串、字节流等形式展示响应体
-
结果关闭:
result.close()
-
-
完整代码:
package com.enjoy.okhttp4 import okhttp3.Cache import okhttp3.OkHttpClient import okhttp3.Request import org.junit.Test import java.io.File class OkHttpTest { @Test fun useOkHttp(){ var okHttpClient = OkHttpClient.Builder() .cache(Cache(File(""),1024)) .build() var request = Request.Builder() .url("https://www.baidu.com") .get() .build() var call = okHttpClient.newCall(request) val result = call.execute() println(result.isSuccessful) result.close() } }
OkHttp 的执行流程
-
流程图:
-
分发器:决定任务什么时候正式执行
- 内部维护队列与线程池,完成请求调配
-
拦截器:完成具体的执行过程
- 完成整个请求过程,最终会返回结果