how to get volley cookies and set it on next request - android

31 Views Asked by At

I use Django, when the user logs in through the API, the response that is sent to Android contains a cookie that includes CSRF and session, and I need to receive its values and send them in the header in the next request. I tried a lot, but the way I did not find a solution

    private void test() {
        RequestQueue requestQueue;
        requestQueue = Volley.newRequestQueue(this);
        String url_ = "https://xxxx.com/api/BF";
        Map<String, String> params = new HashMap<>();
        params.put("Email", UEmail);
        params.put("Password", UPassword);
        JSONObject JOParams = new JSONObject(params);

        
        JsonObjectRequest JORequest = new JsonObjectRequest(Request.Method.POST, url_, JOParams, response -> {
            try {
                String status_ = response.getString("Status");
                if (status_.equals("OK_")) {
                    Toast.makeText(this, "Login", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Login failed", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                Toast.makeText(this, "Data error", Toast.LENGTH_SHORT).show();
            }
        }, error -> {
            Toast.makeText(this, "Connection failed", Toast.LENGTH_LONG).show();
        });
        requestQueue.add(JORequest);
    }

}

Please complete the code. I went through all the previous answers and didn't get any results

1

There are 1 best solutions below

0
ali On BEST ANSWER

Use the code below.

    private void test() {
        RequestQueue requestQueue;
        requestQueue = Volley.newRequestQueue(this);
        String url_ = "https://xxxx.com/api/BF";
        Map<String, String> params = new HashMap<>();
        params.put("Email", UEmail);
        params.put("Password", UPassword);
        JSONObject JOParams = new JSONObject(params);

        
        JsonObjectRequest JORequest = new JsonObjectRequest(Request.Method.POST, url_, JOParams, response -> {
            try {
                String status_ = response.getString("Status");
                if (status_.equals("OK_")) {
                    Toast.makeText(this, "Login", Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(this, "Login failed", Toast.LENGTH_SHORT).show();
                }
            } catch (Exception e) {
                Toast.makeText(this, "Data error", Toast.LENGTH_SHORT).show();
            }
        }, error -> {
            Toast.makeText(this, "Connection failed", Toast.LENGTH_LONG).show();
        }) {
            @Override
            public Map<String, String> getHeaders() {
                Map<String, String>  params = new HashMap<>();
                params.put("User-Agent", "BalesApp");
                if(!csrftoken.isEmpty()){
                    String CookeVAL = "csrftoken=" + csrftoken + "; sessionid=" + sessionid + ";";
                    params.put("Cookie", CookeVAL);
                    params.put("X-CSRFToken", csrftoken);
                }


                return params;
            }
            @Override
            protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {
                int x;
                AHeaders = response.allHeaders;
                for (int n = 0; n< Objects.requireNonNull(AHeaders).size(); n++ ){
                    if(AHeaders.get(n).getName().equals("set-cookie")){
                        HeadVal = AHeaders.get(n).getValue();
                        x = HeadVal.indexOf("csrftoken=");
                        if(x >= 0){
                            int x1 = HeadVal.indexOf("=");
                            int x2 = HeadVal.indexOf(";");
                            csrftoken = HeadVal.substring(x1+1,x2);
                        }

                        x = HeadVal.indexOf("sessionid=");
                        if(x >= 0){
                            int x1 = HeadVal.indexOf("=");
                            int x2 = HeadVal.indexOf(";");
                            sessionid = HeadVal.substring(x1+1,x2);
                        }
                    }
                }

                return super.parseNetworkResponse(response);
            }
        };
        requestQueue.add(JORequest);
    }

}