Reputation: 1407
Iam calling web service in android . in that i want to call the URL i am not sending any params to the server, just calling the URL ,
But its getting Error like [10520] BasicNetwork.performRequest: Unexpected response code 401
my code is
RequestQueue queue = Volley.newRequestQueue(getActivity());
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, Server.URL, null,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
// display response
hideProgressDialog();
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
hideProgressDialog();
}
}
);
// add it to the RequestQueue
queue.add(getRequest);
How to solve this?
Upvotes: 6
Views: 24699
Reputation: 6722
Add Headers ... Perhaps you have forget to add headers in volley requests.
Upvotes: 1
Reputation: 1284
This error means you need to authenticate. You can do so adding getHeaders() to your code, so it goes like this:
RequestQueue queue = Volley.newRequestQueue(getActivity());
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, Server.URL, null,
new Response.Listener<JSONObject>()
{
@Override
public void onResponse(JSONObject response) {
// display response
hideProgressDialog();
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
hideProgressDialog();
}
}
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
params.put("Content-Type", "application/json");
String creds = String.format("%s:%s","username","password");
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
params.put("Authorization", auth);
return params;
}
);
queue.add(getRequest);
Upvotes: 7
Reputation: 419
Add getHeader
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("token", SharedVariables.TOKEN);
headers.put("device", SharedVariables.DEVICE_ID);
headers.put("accept-language", "en-US");
headers.put("api-version", "1.0");
return headers;
}
Upvotes: 1
Reputation: 161
String http_post() {
RequestQueue MyRequestQueue = Volley.newRequestQueue(Library.this);
//String url = "http://" + "hqplayer" + ":" + Utils.password + "@" + Utils.ip + ":8088/library";
String url = "http://" + Utils.ip + ":8088/library";
Log.i(TAG, "HttpPost() <" + url + ">");
String credentials = "hqplayer:valvole";
byte[] t = credentials.getBytes();
byte[] auth = Base64.encode(t, Base64.DEFAULT);
final String basicAuthValue = new String(auth);
MyRequestQueue.add(new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i(TAG, "HttpPost() - onResponse() ");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i(TAG, "HttpPost() - onErrorResponse() ");
Log.i(TAG, "HttpPost() error <" + error + ">");
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
String creds = String.format("%s:%s","hqplayer","valvole");
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
params.put("Authorization", auth);
return params;
}});
return null;
}
Upvotes: 1
Reputation: 1596
If we use POST instead of GET or GET instead of POST mans this error will occur
So, Change GET to Post in this line
JsonObjectRequest getRequest = new JsonObjectRequest(Request.Method.GET, Server.URL, null, new Response.Listener<JSONObject>()
Upvotes: 1
Reputation: 93614
HTTP 401 means that the website requires authentication and it was not provided or it failed. You need to authenticate yourself. Unknown whether you need to provide HTTP Basic Authentication or if the webservice has special authentication required and is just being clever with its return value.
Upvotes: 2