Send authentication information with Volley request
29,584
Solution 1
For authentication, IMHO, you should override getHeaders
instead of getParams
, please try the following:
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
String credentials = "username:password";
String auth = "Basic "
+ Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headers.put("Content-Type", "application/json");
headers.put("Authorization", auth);
return headers;
}
Hope it helps!
Solution 2
just override this method
@Override
public Map<String, String> getHeaders() {
String username ="[email protected]";
String password = "dani3173";
String auth =new String(username + ":" + password);
byte[] data = auth.getBytes();
String base64 = Base64.encodeToString(data, Base64.NO_WRAP);
HashMap<String, String> headers = new HashMap<String, String>();
headers.put("Authorization",base64);
headers.put("accept-language","EN");
headers.put("Content-type","application/json");
headers.put("Accept","application/json");
return headers;
}
Author by
Sony
Updated on July 25, 2020Comments
-
Sony almost 4 years
In my Android app I have to call a web service which looks like this
http://mywesite.com/demo/mob/getmenubycategory/1
I am using the volley to send the request but the result is
VolleyError 401
. I have overridden thegetParams()
method to add the header, but it is not working.Here is my code.
RequestQueue requestQueue = volleySingleton.getRequestQueue(); requestQueue.add(new JsonObjectRequest(Request.Method.GET, url, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { Log.e(TAG, "onResponse = \n " + response.toString()); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "response error \n" + error.networkResponse.statusCode); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { try { Map<String, String> map = new HashMap<String, String>(); String key = "Authorization"; String encodedString = Base64.encodeToString(String.format("%s:%s", "USERNAME", "Password").getBytes(), Base64.NO_WRAP); String value = String.format("Basic %s", encodedString); map.put(key, value); return map; } catch (Exception e) { Log.e(TAG, "Authentication Filure" ); } return super.getParams(); } });
When I use my browser it shows a dialogue to enter my username and password. How can I send the username and password with the request using Volley.
-
Sdghasemi over 7 yearsThanks! Using
getHeaders()
instead ofgetParams()
solved my problem. -
G_V over 7 yearsSo this means creating your own Request extension? How do you pass the username:password data and where do the tokens go?
-
BNK over 7 years@G_V the question is about basic authentication and as you see in my sample code
String credentials = "username:password";
, about the tokens, do you mean access token sent to web service? If yes, it's also ingetHeaders();
-
G_V over 7 years@BNK I am completely new to doing anything security but this means storing the username and password, putting them in the header, sending them, getting a token and then clearing user/pass out in favor of storing the token then?
-
BNK over 7 years@G_V yes, however, it depends on the web service that your android app sending requests, for example, if your web service is ASP.NET Web API, you can see some flows at asp.net/web-api/overview/security/…
-
BNK over 7 years@G_V please read stackoverflow.com/questions/31466653/…