Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何通过android截击获取响应cookie_Java_Android_Android Volley - Fatal编程技术网

Java 我如何通过android截击获取响应cookie

Java 我如何通过android截击获取响应cookie,java,android,android-volley,Java,Android,Android Volley,我在android中用截击发送HTTP请求,关键是在发送请求时,服务器会用一个带有特定键和值的设置Cookie进行响应 我怎样才能得到这个值?通过检查浏览器网络,我得到以下信息 我希望获得此数值,因为这是后续请求的要求 这是我当前的代码 StringRequest postRequest = new StringRequest(Request.Method.POST, linklogin, new Response.Listener<String>()

我在android中用截击发送HTTP请求,关键是在发送请求时,服务器会用一个带有特定键和值的设置Cookie进行响应

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

我希望获得此数值,因为这是后续请求的要求

这是我当前的代码

 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);
StringRequest postRequest=新的StringRequest(Request.Method.POST,linklogin,
新的Response.Listener()
{
@凌驾
公共void onResponse(字符串响应){
//回应
Log.d(“响应”,响应);
}
},
新的Response.ErrorListener()
{
@凌驾
公共无效onErrorResponse(截击错误){
//错误
Log.d(“Error.Response”,Error.getMessage());
}
}
) {
@凌驾
受保护的映射getParams()
{
Map params=新的HashMap();
参数put(“用户”,“用户”);
参数put(“pws”,“pws”);
返回参数;
}
};
添加(postRequest);

我希望这对您有用

重写此方法

            @Override
            protected Response<String> parseNetworkResponse(NetworkResponse response) {
                Log.e("response@@", response.headers.toString());
                Map<String, String> responseHeaders = response.headers;
                String cookies = responseHeaders.get("Set-Cookie");
                Log.e("cookies@@", cookies);
                return super.parseNetworkResponse(response);
            }
@覆盖
受保护的响应parseNetworkResponse(NetworkResponse响应){
Log.e(“response@@@”,response.headers.toString());
Map responseHeaders=response.headers;
字符串cookies=responseHeaders.get(“设置Cookie”);
Log.e(“cookies@”,cookies);
返回super.parseNetworkResponse(response);
}

创建一个名为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);
    }

}
import com.android.volley.AuthFailureError;
导入com.android.volley.Header;
导入com.android.volley.NetworkResponse;
导入com.android.volley.Response;
导入com.android.volley.toolbox.StringRequest;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Map;
公共类VolleyStringRequest实现Response.Listener{
回应者、听者;
Response.ErrorListener-ErrorListener;
int方法=-1;
字符串url;
列表标题=新建ArrayList();
映射参数;
@凌驾
公共void onResponse(字符串响应){
if(侦听器!=null){
onResponse(响应、标题);
}
}
public-VolleyStringRequest(int方法、字符串url、ResponseListener侦听器、Response.ErrorListener ErrorListener、映射参数){
this.listener=listener;
这个方法=方法;
this.url=url;
this.errorListener=errorListener;
this.params=params;
}
public-VolleyStringRequest(字符串url、ResponseListener侦听器、Response.ErrorListener ErrorListener、映射参数){
this.listener=listener;
this.url=url;
this.errorListener=errorListener;
this.params=params;
}
公共请求getRequest(){
如果(方法==-1){
返回新请求(url、this、errorListener);
}否则{
返回新请求(方法、url、this、errorListener);
}
}
类请求扩展了StringRequest{
@凌驾
受保护的映射getParams()引发AuthFailureError{
返回参数;
}
公共请求(int方法、字符串url、Response.Listener、Response.ErrorListener ErrorListener){
super(方法、url、侦听器、errorListener);
}
公共请求(字符串url、Response.Listener、Response.ErrorListener ErrorListener){
超级(url、侦听器、errorListener);
}
@凌驾
受保护的响应parseNetworkResponse(NetworkResponse响应){
headers.addAll(response.allHeaders);
返回super.parseNetworkResponse(response);
}
}
公共接口应答器{
void onResponse(字符串响应、列表标题);
}
}
现在,如何使用该类:

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);
Map params=newhashmap();
StringRequest=new-VolleyStringRequest(request.Method.POST,“https://google.com,新的截击StringRequest.ResponseListener(){
@凌驾
公共void onResponse(字符串响应、列表标题){
//这里有所有的标题,你想用它做什么都行
}
},new Response.ErrorListener(){
@凌驾
公共无效onErrorResponse(截击错误){
}
},params.getRequest();
添加(请求);

使用此方法,我得到了一个NullPointerException查看此答案谢谢我检查了它,但我不知道如何将其与我的代码配合使用截击感谢你回答了这个奇怪的问题,我无法得到设置Cookie,其他人如果:/@DarkFenix你能给出url和凭据吗,我想用此代码尝试一下否,它目前是一个私有URL,并且@Sahil Manchanda如果我使用的是JSON对象请求而不是字符串请求和POST方法,我如何获取设置Cookie?我有一个公开的悬赏请看看这个问题。