OkHttpClient.Builder
build —创建一个OKHttpClient实例
1、OkHttpClient本身不能设置参数,需要借助于其内部类Builder设置参数
(1)addInterceptor —- 添加拦截器 (在请求执行刚开始,还没有执行OKHttp核心代码之前拦截)
—-不用担心影响OKHttp请求的策略和请求速度;
—-从缓存从取数据也会执行addInterceptor;
—-允许多次重试,Chain.proceed()可以执行多次。(不要盲目重试,需要对错误加上自己的判断再重试)
(2)addNetwordInterceptor —添加网络拦截器(在连接网络之前拦截)
—-可以修改OKHttp框架自动添加一些属性(最好需要修改);
—–可以观察最终的完整请求参数(就是服务器接受到的参数);
拦截器在实际开发中的用处:1、对请求参数做统一加密处理;2、拦截不规则的URL;3、对请求或者返回的参数设置统一的编码格式;4、其他;
(3)authenticator —-身份验证
—-设置用于响应来自服务器的挑战的认证器;
(4)cache —-缓存
——设置响应缓存用于读取和写入缓存响应。
(5)proxy —-代理
—-设置即将连上http服务器代理的参数;
(6)readTimeout —设置读取超过时间的参数
Request
—–OKHttp用到的请求,Request.build
Request里面封装了请求的报文信息:请求的URL、请求的方法(如GET、POST)、请求头(如Content-Type、Cookie)以及其他。
如下图所示:
call
—–代表实际的http请求,它是连接Request和response的桥梁
(1)call既能同步获取数据也能异步获取数据
—-同步获取数据
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
execute方法会阻塞当前的线程去获取数据,返回response对象
—-异步获取数据
OKHttpClient client = new OKHttpClient();
Request request = new Request.Builder()
.url(“http://publicobject.com/helloworld.txt“)
.build();
client.newCall.(request).enqueue(new Callback() {
@Override //异步获取数据失败
public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override //异步获取数据成功,将response传入改方法
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
Headers responseHeaders = response.headers();
for (int i = 0, size = responseHeaders.size(); i < size; i++) {
System.out.println(responseHeaders.name(i) + ": " + responseHeaders.value(i));
}
System.out.println(response.body().string());
}
});
enqueue不会阻塞该线程,enqueue接收一个Callback对象;
Response
—–这个类封装了一些响应报文信息
(1)状态码,比如说(200、404等)
1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
100(继续)
2xx (成功)
表示成功处理了请求的状态代码。
200(成功)
3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
300 (多种选择)
4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。
400 (错误请求)
5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。
500 (服务器内部错误)
(2)响应头(Content-Type、Server等)
(3)可选的响应体
execute和enqueue都能够获得Response对象;
如下为OKHttp的流程图