Okhttp3 Interceptor
来源:互联网 发布:高光谱遥感数据降维 编辑:程序博客网 时间:2024/06/06 02:38
这些都是要添加进去的Interceptor。最终执行网络请求的就只有CallServerInterceptor,其他都是用来过滤,重定向的
List<Interceptor> interceptors = new ArrayList<>(); interceptors.addAll(client.interceptors()); interceptors.add(retryAndFollowUpInterceptor); interceptors.add(new BridgeInterceptor(client.cookieJar())); interceptors.add(new CacheInterceptor(client.internalCache())); interceptors.add(new ConnectInterceptor(client)); if (!forWebSocket) { interceptors.addAll(client.networkInterceptors()); } interceptors.add(new CallServerInterceptor(forWebSocket));
所以,如果要添加你自己的过滤器。可以用如下两种方法添加
mOkHttpClient = new OkHttpClient().newBuilder().addInterceptor(new LogIntercept()).build();mOkHttpClient = new OkHttpClient().newBuilder().addNetworkInterceptor(new LogIntercept()).build(); //-------LogIntercept的实现 class LogIntercept implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); Log.e("request", request.toString()); Response response = chain.proceed(request);//当进行到这一步的时候不会执行下面的log。等到最后CallServerInterceptor请求完了以后才会执行下面的log Log.e("response", response.toString()); return response; } }
我们现在来看CallServerInterceptor的intercept函数
其中会发现这里面并没有我们通常见到的socket,httpurlconnection的常见的网络操作(其实是被封装了),而是Http1Codec和Http2Codec
Http1Codec主要关注两个函数
writeRequest ——Send request headers.发送请求(这个函数有的时候是通过writeRequestHeaders方法来调用的)
readResponseHeaders ——Read response headers.读取返回的head
还有两个重要的数据结构:
BufferedSource source;
BufferedSink sink;
他们的初始化在RealConnection里面
source = Okio.buffer(Okio.source(rawSocket));
sink = Okio.buffer(Okio.sink(rawSocket));
参考:
http://www.jianshu.com/p/a42170233a32
http://www.jianshu.com/p/92ce01caa8f0
阅读全文
0 0
- Okhttp3 Interceptor
- OkHttp3中Interceptor的使用心得
- OkHttp3 Interceptor 拦截器的使用 统一追加参数
- OkHttp3
- OkHttp3
- OkHttp3
- OkHttp3
- OkHttp3
- Okhttp3
- okHttp3
- OkHttp3
- Retrofit2,okhttp3 通过拦截器(Interceptor)两种缓存(离线和在线)
- interceptor
- interceptor
- interceptor
- interceptor
- interceptor
- interceptor
- 如何理解Stand SPI Dual SPI 和Quad SPI??
- 发布开源项目到jcenter的详细步骤
- Gradle's dependency cache may be corrupt(this sometimes occurs after a network connection timeout.)
- Android 多线程-----AsyncTask详解
- jsp打印九九乘法表
- Okhttp3 Interceptor
- JavaScript函数小记
- 如何判断 js 中的数据类型
- Ionic2使用非ionic-native中的cordova插件的方法
- centos7.2RPM安装mysql5.6
- Opencv JNI Android Camera 效率分析
- java之代理模式
- 一步一步写Makefile(3):伪目标,静态规则,shell命令和去回显,嵌套执行Makefile
- 这种关于进制的C语言题目,到底如何解答?