阻止 Volley 发送缓存 headers

Stop Volley from sending cache headers

截击不断发送If-Modified-Sinceheader.

我需要阻止 volley 发送这个 header 因为它一直在干扰来自第三方服务器的响应。如何阻止 volley 发送缓存 headers?

更新:

BasicNetwork.java中,你会发现

private void addCacheHeaders(Map<String, String> headers, Cache.Entry entry) {
        // If there's no cache entry, we're done.
        if (entry == null) {
            return;
        }

    if (entry.etag != null) {
        headers.put("If-None-Match", entry.etag);
    }

    if (entry.lastModified > 0) {
        Date refTime = new Date(entry.lastModified);
        headers.put("If-Modified-Since", DateUtils.formatDate(refTime));
    }
}

所以我认为您可以尝试以下方法之一:

  • 调用setShouldCache(false);,例如:jsonObjectRequest.setShouldCache(false);
  • 创建一个自定义的BasicNetwork变量,在其中覆盖performRequest并设置Cache.Entry变量为null或entry.lastModified <= 0,可以试试下面的方法:

         BasicNetwork basicNetwork = new BasicNetwork(hurlStack) {
             @Override
             public NetworkResponse performRequest(Request<?> request) throws VolleyError {
                 request.setCacheEntry(null);
                 // request.setShouldCache(false);
                 return super.performRequest(request);
            }
         };
    

更新结束

IMO 你需要覆盖 getHeaders 方法,你可以尝试以下两种方式之一:

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> headerMap = super.getHeaders();
            if (headerMap.containsKey("If-Modified-Since")) {
                headerMap.remove("If-Modified-Since");
            }
            return headerMap;
        }

        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
             Map<String, String> headerMap = new HashMap<>();
             headerMap.put("Content-Type", "application/json");
             //...
             //headerMap.put("other keys", "other values");
             //...
             return headerMap;
        }

希望对您有所帮助!