java - 我怎样才能用 android volley 获得响应 cookie

标签 java android android-volley

我正在发送 HTTP 请求 在带有 Volley 的 android 中,关键是在发送请求时,服务器使用具有特定键和值的 Set-Cookie 进行响应,

我怎样才能得到这个值?检查浏览器网络我得到以下信息

enter image description here

我想获取这个数值,因为它是后续请求的要求。

这是我当前的代码。

 StringRequest postRequest = new StringRequest(Request.Method.POST, linklogin,
            new Response.Listener<String>()
            {
                @Override
                public void onResponse(String response) {
                    // response
                    Log.d("Response", response);
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                    // error
                    Log.d("Error.Response", error.getMessage());
                }
            }
    ) {
        @Override
        protected Map<String, String> getParams()
        {
            Map<String, String>  params = new HashMap<String, String>();
            params.put("user", "");
            params.put("pws", "");

            return params;
        }

    };
    queue.add(postRequest);

最佳答案

创建一个名为 VolleyStringRequest 的新类并粘贴以下代码:

import com.android.volley.AuthFailureError;
import com.android.volley.Header;
import com.android.volley.NetworkResponse;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class VolleyStringRequest implements Response.Listener<String> {
    ResponseListener listener;
    Response.ErrorListener errorListener;
    int method = -1;
    String url;
    List<Header> headers = new ArrayList<>();
    Map<String, String> params;

    @Override
    public void onResponse(String response) {
        if (listener != null) {
            listener.onResponse(response, headers);
        }
    }

    public VolleyStringRequest(int method, String url, ResponseListener listener, Response.ErrorListener errorListener, Map<String, String> params) {
        this.listener = listener;
        this.method = method;
        this.url = url;
        this.errorListener = errorListener;
        this.params = params;

    }

    public VolleyStringRequest(String url, ResponseListener listener, Response.ErrorListener errorListener, Map<String, String> params) {
        this.listener = listener;
        this.url = url;
        this.errorListener = errorListener;
        this.params = params;
    }

    public Request getRequest() {
        if (method == -1) {
            return new Request(url, this, errorListener);
        } else {
            return new Request(method, url, this, errorListener);
        }
    }

    class Request extends StringRequest {

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            return params;
        }

        public Request(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
            super(method, url, listener, errorListener);
        }

        public Request(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
            super(url, listener, errorListener);
        }

        @Override
        protected Response<String> parseNetworkResponse(NetworkResponse response) {
            headers.addAll(response.allHeaders);
            return super.parseNetworkResponse(response);
        }
    }

    public interface ResponseListener {
        void onResponse(String response, List<Header> headers);
    }

}

现在如何使用这个类:

Map<String,String> params = new HashMap<>();
        StringRequest request = new VolleyStringRequest(Request.Method.POST,"https://google.com", new VolleyStringRequest.ResponseListener() {
            @Override
            public void onResponse(String response, List<Header> headers) {
//here you get all the headers. do whatever you want with it
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        },params).getRequest();
      queue.add(request);

关于java - 我怎样才能用 android volley 获得响应 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934164/

相关文章:

java - 为什么我在 "new Scanner(System.in);"上收到错误?

java - 如何在 war 文件中添加对 Java 类的依赖项

android - 通过获取 mediaPlayer 的幅度来制作进度条动画

android - 权限仅授予系统应用程序,在 list 中

android - 使用 Volley 进行异步帐户身份验证

java - 使用 Java 创建到 oracle db 的 ssl 连接

java - 在Java中发送邮件时是否可以屏蔽/欺骗电子邮件地址

android - Kotlin - Recycleview ViewHolder OnClick 不工作

java - 为什么Python http服务器会导致android VolleyError

php - Volley POST 字符串请求意外错误 500