概述
- 源码基于 OkHttp-3.14.6
依赖
- 在
build.gradle
中添加以下代码implementation 'com.squareup.okhttp3:okhttp:3.14.6'
网络请求
- 初始化
OkHttpClient
- 构建
OkHttpClient
有两种方式:OkHttpClient
和OkHttpClient.Builder
; -
OkHttpClient
- 使用
OkHttpClient
只能调用默认构造函数,配置项都是默认的;
- 使用
-
OkHttpClient.Builder
OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) .readTimeout(5, TimeUnit.SECONDS) .writeTimeout(5, TimeUnit.SECONDS) .callTimeout(10, TimeUnit.SECONDS) .followRedirects(true) .followSslRedirects(true) .addInterceptor(null) .cache(null) .cookieJar(null) .protocols(null) .authenticator(null) .dns(null) .proxy(null) .certificatePinner(null) .connectionPool(null) .connectionSpecs(null) .dispatcher(null) .eventListener(null) .build();
- 使用
OkHttpClient.Builder
可以配置各种参数,比如超时,代理,缓存,证书,连接池,重定向,拦截器等等; - 还可以通过
OkHttpClient#newBuilder
生成一个Builder
在修改相关配置,最终生成另一个OkHttpClient
,但是有些是公用的,比如连接池和线程池;
- 使用
- 构建
- 创建
Call
对象Request request = new Request.Builder() .url("https://www.baidu.com") .build(); Call call = client.newCall(request);
-
Request
包括请求需要的所有参数,包括 url,请求方法,header,body; -
Call
表示一次网络请求,包括一对Request
Response
;只能请求一次;
-
- 发起请求
call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { } }); try { Response response = call.execute(); } catch (IOException e) { e.printStackTrace(); }
- 支持同步和异步请求;