Search code examples
androidhttp-headersadtandroid-volleysetcookie

Android Volley, duplicate Set-Cookie is overridden


Trying to use Volley lib as a network wrapper for my android application. I have a connection up and running, but the problem is that every time there is multiple "Set-Cookie" headers in the response Volley uses Map that cannot have duplicate keys, and will only store the last Set-cookie header and overwrite the rest.

Is there a workaround for this issue?

Is there another lib to use?


Solution

  • I tried overiding classes to fix this but when I had to edit NetworkResponse, I was descending too far down the rabbithole. So I decided to just edit Volley directly to grab all response headers in an array and not a Map.

    My fork is on GitHub and I included an example usage activity.

    I made changes to NetworkResponse.java, BasicNetwork.java and HurlStack.java as detailed in this commit.

    Then to use in your actual apps you do something like this

    protected Response<String> parseNetworkResponse(NetworkResponse response) {
                // we must override this to get headers. and with the fix, we should get all headers including duplicate names
                // in an array of apache headers called apacheHeaders. everything else about volley is the same
                for (int i = 0; i < response.apacheHeaders.length; i++) {
                    String key = response.apacheHeaders[i].getName();
                    String value = response.apacheHeaders[i].getValue();
                    Log.d("VOLLEY_HEADERFIX",key + " - " +value);
                }
    
                return super.parseNetworkResponse(response);
            }
    

    It's a dirty little hack but seems to work well for me at the moment.