如何在 android studio 中使用 volley 库获取会话 cookie?

how to get the session cookies using volley library in android studio?

我正在 android 工作室 (java) 制作一个 android 应用程序,它使用其余 API 来获取和 post 数据。 我可以登录并注册到服务器,但为了从服务器获取数据,我需要会话 cookie,但我不知道如何使用 volley 库获取会话 cookie。

这是我的登录工作代码:-

private void login(String email,String password){
        String url = "https://someURL.com/login";

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                textView.setText("String Response : "+ response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                textView.setText("error");
            }
        }){
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                params.put("email",email);
                params.put("password",password);
                return params;
            }
        };

        requestQueue.add(stringRequest);
    }

这是我的请求代码:-

    private void getProfile(String id,String email,String password){
        String url = "https://someURL.com/profile/:"+id;

        StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                textView.setText("String Response : "+ response.toString());
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                textView.setText("Profile error");
            }
        });

        requestQueue.add(stringRequest);
    }

两者都工作正常,但为了从服务器获取数据,我需要创建一个基于 cookie 的会话。请帮忙...我已经搜索了资源但没有任何效果。

我已经解决了这个问题(通过查阅 volley 库的文档和源代码)。 我得到的解决方案不是自动处理 session cookies 的方法,而是通过覆盖 Volley 的一些方法来解决的。 我的问题是如何获取 session cookie,然后如何设置 session cookie(我知道这是一种新手的说法,技术上不正确 - 为了清楚起见,请进一步阅读)。

我通过覆盖 Volley 的 'parseNetworkResponse' 方法解决了我的第一个问题。此方法有一个 'response' 参数,可以使用 'response.headers' 给出服务器响应的所有 headers。 下面是我的代码:-

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                Map<String, String> responseHeaders = response.headers;
                cookie = new String(responseHeaders.get("Set-Cookie"));
                Log.i("cookies",cookie);
                jsonObject = new JSONObject(response.headers);
                Log.i("response", String.valueOf(jsonObject));
                return super.parseNetworkResponse(response);
            }

对于我的第二个问题,我重载了 'getHeaders' 方法。对于任何 authentication-based.

的查询,此方法可用于将 cookie 发送回服务器

下面是我的代码:-


            @Override
            public Map<String, String> getHeaders() throws AuthFailureError {
                Map<String,String> headers = new HashMap<>();
                try {
                    headers.put("cookie",String.valueOf(jsonObject.get("Set-Cookie")));
                    Log.i("header created ",headers.toString());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return headers;
            }

*在应用任何 API 测试应用程序的代码之前,请务必检查您的响应 cookie。

以及任何进一步的解释。我一直在寻找解决方案超过 10 天。