微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用 android studio 中的 volley 库获取会话 cookie?

我正在 android studio (java) 中制作一个 android 应用程序,它使用其余的 API 来获取和发布数据。 我可以登录注册到服务器,但为了从服务器获取数据,我需要会话 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,new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                textView.setText("Profile error");
            }
        });

        requestQueue.add(stringRequest);
    }

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

解决方法

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

我通过覆盖 Volley 的“parseNetworkResponse”方法解决了我的第一个问题。这个方法有一个'response'参数,它可以通过使用'response.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' 方法。对于任何基于身份验证的查询,此方法可用于将 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。

请随时提出任何修改建议(我只是 android studio 和 StackOverflow 的初学者)。 以及任何进一步的解释。我找了 10 多天的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?