private @Nullable Response getCacheOnlyResponse(Request request) { if (!post && client.cache() != null) { try { Request cacheRequest = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build(); Response cacheResponse = client.newCall(cacheRequest).execute(); if (cacheResponse.code() != 504) { return cacheResponse; } } catch (IOException ioe) { // Failures are ignored as we can fallback to the network // and hopefully repopulate the cache. } } return null; }
@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); boolean forceCache = CACHE_ENABLED_HOSTS.containsKey(request.url().host()) && !AppUtils.hasConnection(mContext); return chain.proceed(forceCache ? request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build() : request); } }
builder.cacheControl(cacheControl);
@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!NetUtil.isNetworkAvailable()) { request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); KLog.d("no network"); } Response originalResponse = chain.proceed(request); if (NetUtil.isNetworkAvailable()) { //有网的时候读接口上的@Headers里的配置,你可以在这里进行统一的设置 String cacheControl = request.cacheControl().toString(); return originalResponse.newBuilder() .header("Cache-Control", cacheControl) .removeHeader("Pragma") .build(); } else { return originalResponse.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=" + CACHE_STALE_SEC) .removeHeader("Pragma") .build(); } } };
@Override public void onRequest(@NonNull String url, @NonNull Callback cb, long requestHandle) { HttpUrl httpUrl = HttpUrl.parse(url + "?api_key=" + apiKey); if (httpUrl == null) { cb.onFailure(null, new IOException("HttpUrl failed to parse url=" + url)); } else { Request.Builder builder = new Request.Builder() .url(httpUrl) .tag(requestHandle) .header("User-Agent", ApplicationConstants.USER_AGENT + " / " + Version.userAgent()); CacheControl cacheControl = cachePolicy.apply(httpUrl); if (cacheControl != null) { builder.cacheControl(cacheControl); } Request request = builder.build(); okClient.newCall(request).enqueue(cb); } } }
requestBuilder.addHeader("Range", String.format(Locale.ENGLISH, "bytes=%d-", mFileInfo.getLoadBytes())); requestBuilder.cacheControl(CacheControl.FORCE_NETWORK);
builder.cacheControl(request.getCacheControl());
builder = builder.post(new RequestProgressBody(requestBody, request.getUploadProgressListener())); if (request.getCacheControl() != null) { builder.cacheControl(request.getCacheControl());
builder = builder.post(new RequestProgressBody(requestBody, request.getUploadProgressListener())); if (request.getCacheControl() != null) { builder.cacheControl(request.getCacheControl());
builder = builder.get(); if (request.getCacheControl() != null) { builder.cacheControl(request.getCacheControl());
builder.cacheControl(request.getCacheControl());
builder.cacheControl(request.getCacheControl());
builder = builder.post(new RequestProgressBody(requestBody, request.getUploadProgressListener())); if (request.getCacheControl() != null) { builder.cacheControl(request.getCacheControl());
builder = builder.get(); if (request.getCacheControl() != null) { builder.cacheControl(request.getCacheControl());
builder = builder.get(); if (request.getCacheControl() != null) { builder.cacheControl(request.getCacheControl());
@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); String cacheControl = request.cacheControl().toString(); if (!NetWorkUtils.isNetConnected(BaseApplication.getAppContext())) { request = request.newBuilder() .cacheControl(TextUtils.isEmpty(cacheControl)?CacheControl.FORCE_NETWORK:CacheControl.FORCE_CACHE) .build(); } Response originalResponse = chain.proceed(request); if (NetWorkUtils.isNetConnected(BaseApplication.getAppContext())) { //有网的时候读接口上的@Headers里的配置,你可以在这里进行统一的设置 return originalResponse.newBuilder() .header("Cache-Control", cacheControl) .removeHeader("Pragma") .build(); } else { return originalResponse.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=" + CACHE_STALE_SEC) .removeHeader("Pragma") .build(); } } };
@Override public Response intercept(Chain chain) throws IOException { // 有网络时 设置缓存超时时间1个小时 int maxAge = 60 * 60; // 无网络时,设置超时为1天 int maxStale = 60 * 60 * 24; Request request = chain.request(); if (CommonUtil.isNetworkAvailable(BilibiliApp.getInstance())) { //有网络时只从网络获取 request = request.newBuilder().cacheControl(CacheControl.FORCE_NETWORK).build(); } else { //无网络时只从缓存中读取 request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build(); } Response response = chain.proceed(request); if (CommonUtil.isNetworkAvailable(BilibiliApp.getInstance())) { response = response.newBuilder() .removeHeader("Pragma") .header("Cache-Control", "public, max-age=" + maxAge) .build(); } else { response = response.newBuilder() .removeHeader("Pragma") .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) .build(); } return response; } }
@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!NetWorkUtil.isNetConnected(App.getAppContext())) { request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); Log.d("Okhttp", "no network"); } Response originalResponse = chain.proceed(request); if (NetWorkUtil.isNetConnected(App.getAppContext())) { //有网的时候读接口上的@Headers里的配置,你可以在这里进行统一的设置 String cacheControl = request.cacheControl().toString(); return originalResponse.newBuilder() .header("Cache-Control", cacheControl) .removeHeader("Pragma") .build(); } else { return originalResponse.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale=2419200") .removeHeader("Pragma") .build(); } } }
@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (!NetUtil.isNetworkAvailable(AndroidApplication.getContext())) { request = request.newBuilder().cacheControl(CacheControl.FORCE_CACHE).build(); Logger.e("no network"); } Response originalResponse = chain.proceed(request); if (NetUtil.isNetworkAvailable(AndroidApplication.getContext())) { //有网的时候读接口上的@Headers里的配置,你可以在这里进行统一的设置 String cacheControl = request.cacheControl().toString(); return originalResponse.newBuilder() .header("Cache-Control", cacheControl) .removeHeader("Pragma") .build(); } else { return originalResponse.newBuilder() .header("Cache-Control", "public, " + CACHE_CONTROL_CACHE) .removeHeader("Pragma") .build(); } } };
private static okhttp3.Request createRequest(Request request) { CacheControl cacheControl = null; int networkPolicy = request.networkPolicy; if (networkPolicy != 0) { if (NetworkPolicy.isOfflineOnly(networkPolicy)) { cacheControl = CacheControl.FORCE_CACHE; } else { CacheControl.Builder builder = new CacheControl.Builder(); if (!NetworkPolicy.shouldReadFromDiskCache(networkPolicy)) { builder.noCache(); } if (!NetworkPolicy.shouldWriteToDiskCache(networkPolicy)) { builder.noStore(); } cacheControl = builder.build(); } } Uri uri = checkNotNull(request.uri, "request.uri == null"); okhttp3.Request.Builder builder = new okhttp3.Request.Builder().url(uri.toString()); if (cacheControl != null) { builder.cacheControl(cacheControl); } return builder.build(); }