我正在发送 HTTP 请求 在带有 Volley 的 android 中,关键是在发送请求时,服务器使用具有特定键和值的 Set-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);
最佳答案
创建一个名为 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/