Reputation: 746
I am sending HTTP requests In android with Volley, the point is that when sending the request, the server responds with a Set-Cookie with a certain key and value,
How can I get this value? checking the browser network I get the following
I would like to obtain this numeric value as it is a requirement for subsequent requests.
This is my current code.
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);
Upvotes: 2
Views: 1666
Reputation: 10012
Create a new class named VolleyStringRequest and paste the following code:
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);
}
}
Now how to use this Class:
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);
Upvotes: 1
Reputation: 1219
I hope this will work for you.
override this method.
@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);
}
Upvotes: 0