ok常用拦截器 会追加

package utils;

import android.util.Log;

import com.liu.asus.yikezhong.Myapp;

import java.io.IOException;
import java.util.List;

import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.Interceptor;
import okhttp3.MultipartBody;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;

/**
 * Created by 地地 on 2017/12/10.
 * 邮箱:461211527@qq.com.
 */

public class NetInterceptor {
    private static final int TIMEOUT_CONNECT = 5; //5秒
    private static final int TIMEOUT_DISCONNECT = 60 * 60 * 24 * 7; //7天

    public static final Interceptor REWRITE_RESPONSE_INTERCEPTOR = new Interceptor() {
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            //获取retrofit @headers里面的参数,参数可以自己定义,在本例我自己定义的是cache,跟@headers里面对应就可以了
            String cache = chain.request().header("cache");
            okhttp3.Response originalResponse = chain.proceed(chain.request());
            String cacheControl = originalResponse.header("Cache-Control");
            //如果cacheControl为空,就让他TIMEOUT_CONNECT秒的缓存,本例是5秒,方便观察。注意这里的cacheControl是服务器返回的
            if (cacheControl == null) {
                //如果cache没值,缓存时间为TIMEOUT_CONNECT,有的话就为cache的值
                if (cache == null || "".equals(cache)) {
                    cache = TIMEOUT_CONNECT + "";
                }
                originalResponse = originalResponse.newBuilder()
                        .header("Cache-Control", "public, max-age=" + cache)
                        .build();
                return originalResponse;
            } else {
                return originalResponse;
            }
        }
    };

    public static final Interceptor REWRITE_RESPONSE_INTERCEPTOR_OFFLINE = new Interceptor() {
        @Override
        public okhttp3.Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            //离线的时候为7天的缓存。
            if (!MyNetUtils.isConnected(Myapp.context)) {
                request = request.newBuilder()
                        .header("Cache-Control", "public, only-if-cached, max-stale="+TIMEOUT_DISCONNECT)
                        .build();
            }
            return chain.proceed(request);
        }
    };
  public static final Interceptor REWRITE_RESPONSE_INTERCEPTOR_LOG = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
      @Override
      public void log(String message) {
          System.out.println("MYOKTTP==="+message);
      }
     }).setLevel(HttpLoggingInterceptor.Level.BODY);


    public static final Interceptor REWRITE_RESPONSE_MYINTERCEPTOR=new Interceptor() {
        public String TAG = "LogInterceptor";
        @Override
        public Response intercept(Chain chain) throws IOException {
            Request request = chain.request();
            String  token = (String) SPUtils.get(Myapp.context, "token", "");
            Log.d(TAG,"\n");
            Log.d(TAG,"----------Start----------------"+token);
            String method=request.method();
            if("POST".equals(method)){
                FormBody.Builder sb = new FormBody.Builder();
                if (request.body() instanceof FormBody) {
                    FormBody body = (FormBody) request.body();
                    for (int i = 0; i < body.size(); i++) {
                        sb.add(body.encodedName(i) , body.encodedValue(i));
                    }
                    body=sb.add("source","android").add("appVersion","101")
                            .add("token",token)
                            .build();
                    request=request.newBuilder().post(body).build();
                    Log.d(TAG, "| "+request.toString());
                }else {
                    MultipartBody body=(MultipartBody)request.body();
                    MultipartBody.Builder build = new MultipartBody.Builder().setType(MultipartBody.FORM);
                    build  .addFormDataPart("source","android");
                    build  .addFormDataPart("appVersion","101");
                    build  .addFormDataPart("token",token);
                    List<MultipartBody.Part> parts = body.parts();
                    for (MultipartBody.Part part : parts) {
                        build.addPart(part);
                    }
                    request =request.newBuilder().post(build.build()).build();
                }
            }else {
                HttpUrl httpUrl = request.url()
                        .newBuilder()
                        .addQueryParameter("source","android")
                        .addQueryParameter("appVersion","101")
                        .addQueryParameter("token",token)
                        .build();
                System.out.println("====httpurl"+httpUrl);
                request = request.newBuilder().get().url(httpUrl).build();
            }
            return  chain.proceed(request);
        }
    };

}


日志拦截器 记得导依赖 

compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
public static final int TIMEOUT=1000*100;

OkHttpClient okHttpClient=new OkHttpClient.Builder()
        .addInterceptor(NetInterceptor.REWRITE_RESPONSE_MYINTERCEPTOR)
        .addInterceptor(NetInterceptor.REWRITE_RESPONSE_INTERCEPTOR_LOG)
        .addInterceptor(NetInterceptor.REWRITE_RESPONSE_INTERCEPTOR_OFFLINE)
        .addNetworkInterceptor(NetInterceptor.REWRITE_RESPONSE_INTERCEPTOR)
        .connectTimeout(TIMEOUT, TimeUnit.SECONDS)
        .readTimeout(TIMEOUT, TimeUnit.SECONDS)
        .writeTimeout(TIMEOUT, TimeUnit.SECONDS)
        .retryOnConnectionFailure(false)
        .cache(cache).build();





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值