压缩包:
InterceptorUnitTest.java
一、拦截器
1.OkHttpClient okHttpClient = **new **OkHttpClient.Builder().addInterceptor(**new **XXX).build();<br /> 2.OkHttpClient okHttpClient = **new **OkHttpClient.Builder().addNetwordInterceptor(**new **XXX).build();
注意:这两个方法添加拦截器的区别就是在于addInterceptor一定在前面执行,addNetworkInterceptor一定在后面执行。
二、拦截器的整体代码
1.InterceptorUnitTest类文件代码
package com.example.networkdemo;import android.util.Log;import org.jetbrains.annotations.NotNull;import org.junit.Test;import java.io.IOException;import okhttp3.Call;import okhttp3.Interceptor;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class InterceptorUnitTest {@Testpublic void interceptorTest() {OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {@NotNull@Overridepublic Response intercept(@NotNull Chain chain) throws IOException {// 前置处理Request request = chain.request().newBuilder().addHeader("os", "android").addHeader("version", "1.0").build();Response response = chain.proceed(request);// 后置处理return response;}}).addNetworkInterceptor(new Interceptor() {@NotNull@Overridepublic Response intercept(@NotNull Chain chain) throws IOException {System.out.println(chain.request().header("version"));return chain.proceed(chain.request());}}).build();// 请求对象Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();// 准备好请求的Call对象Call call = okHttpClient.newCall(request);try {// 请求得到的响应Response response = call.execute();System.out.println(response.body().string());} catch (IOException e) {e.printStackTrace();}}}
三、缓存与Cookie
OkHttp按照Http协议规则实现了缓存的处理,缓存时比如:当我们发起第一次请求之后,如果后续还需要进行同样的请求,此时如果符合缓存规则,则可以减少与服务器的网络通信,直接从本地文件缓存中读取响应返回给请求者。但是默认情况下,OkHttp的缓存时关闭状态,需要我们开启。

Cookie是某些网站为了辨别用户身份,进行会话跟踪(比如确定登陆状态)而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息。
四、缓存的整体代码
1.InterceptorUnitTest类文件代码
package com.example.networkdemo;import android.util.Log;import org.jetbrains.annotations.NotNull;import org.junit.Test;import java.io.File;import java.io.IOException;import okhttp3.Cache;import okhttp3.Call;import okhttp3.Interceptor;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class InterceptorUnitTest {@Testpublic void interceptorTest() {// pathname:缓存文件地址// maxSize:环迅最大容量字节OkHttpClient okHttpClient = new OkHttpClient.Builder().cache(new Cache(new File("C:\\Users\\ASUS\\Desktop"),1024*1024)).addInterceptor(new Interceptor() {@NotNull@Overridepublic Response intercept(@NotNull Chain chain) throws IOException {// 前置处理Request request = chain.request().newBuilder().addHeader("os", "android").addHeader("version", "1.0").build();Response response = chain.proceed(request);// 后置处理return response;}}).addNetworkInterceptor(new Interceptor() {@NotNull@Overridepublic Response intercept(@NotNull Chain chain) throws IOException {System.out.println(chain.request().header("version"));return chain.proceed(chain.request());}}).build();// 请求对象Request request = new Request.Builder().url("https://www.httpbin.org/get?a=1&b=2").build();// 准备好请求的Call对象Call call = okHttpClient.newCall(request);try {// 请求得到的响应Response response = call.execute();System.out.println(response.body().string());} catch (IOException e) {e.printStackTrace();}}}
