我使用Django,当用户通过API登录时,发送到Android的响应包含一个cookie,其中包含CSRF和Session,我需要接收它的值并在下一个请求的Header中发送它们.我试了很多,但还是没有找到解决办法

    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);
    }

}

请完成代码.我判断了所有以前的答案,但没有得到任何结果

推荐答案

使用下面的代码.

    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);
    }

}

Java相关问答推荐

Java 21虚拟线程会解决转向react 式单线程框架的主要原因吗?

如何在Docker容器中使用wireock—Webhooks阻止请求?

ApachePOI:不带换行的新行

springboot start loge change

为什么使用JDK21获取锁定锁比使用JDK11慢

如何对多个字段进行分组和排序?

Java Mooc.fi Part 12_01.Hideout -返回和删除方法

如何使用路径过渡方法使 node 绕圆旋转?

根本不显示JavaFX阿拉伯字母

将关闭拍卖的TimerService

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

带有可选部分的Java DateTimeForMatter

Java中HashSet的搜索时间与TreeSet的搜索时间

JOLT根据值删除并保留其余的json键

记录是类的语法糖吗?

持续时间--为什么在秒为负数的情况下还要做额外的工作?

在Java中比较同一多维数组的两个不同的字符串元素

rest api服务 spring 启动中出现IllegalFormatConversionException

为什么我得到默认方法的值而不是被覆盖的方法的值?

在输入端没有可行的替代方案'; Select *';