¿Cómo se puede usar la Autenticación básica con Volley en Android?

Estoy buscando ejemplos y códigos, pero no veo nada implementado. ¿Es esto posible en esta etapa?

Si es posible. Debe sobrescribir Request.getHeaders (). Soy flojo y utilicé HttpHeaders y HttpAuthentication de Spring para Android, pero puedes construir el encabezado de autenticación y devolverlo desde el método. Desde getHeaders () puede devolver el encabezado de autenticación para la autenticación básica. Esta es una solicitud de muestra con autenticación básica.

public class GetUser extends Request { private static final String TAG = GetUser.class.getName(); private Response.Listener mListener; private ObjectMapper mMapper = new ObjectMapper(); public GetUser(Response.ErrorListener errorListener, Response.Listener listener){ super(Method.GET, PoisUtils.BASE_URL + "/users", errorListener); mListener = listener; } @Override protected Response parseNetworkResponse(NetworkResponse response) { String jsonString = new String(response.data); try { User result = mMapper.readValue(jsonString, User.class); return Response.success(result, getCacheEntry()); } catch (IOException e) { Log.d(TAG, e.getMessage()); } return null; } @Override protected void deliverResponse(User response) { mListener.onResponse(response); } @Override public Map getHeaders() throws AuthFailureError { return AuthUtils.buildAuthHeaders().toSingleValueMap(); } } 

Y aquí es cómo construyo los encabezados de autenticación

 public static HttpHeaders buildAuthHeaders(){ if(UserUtils.isUserLogged()){ HttpHeaders requestHeaders = new HttpHeaders(); User user = PoisApplication.get().getUser(); HttpAuthentication auth = new HttpBasicAuthentication( user.getUsername(), user.getPassword()); requestHeaders.setAuthorization(auth); return requestHeaders; } return null; } 

Para aquellos que no quieran usar Spring para Android solo para eso, he aquí cómo hacerlo.

 @Override public Map getHeaders() throws AuthFailureError { HashMap params = new HashMap(); String creds = String.format("%s:%s","USERNAME","PASSWORD"); String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT); params.put("Authorization", auth); return params; } 

Tenga en cuenta que puede tener que usar Base64.NO_WRAP lugar de Base64.DEFAULT para que esto funcione. Como se señaló en los comentarios.

API 8+

Para una autorización de proxy (como squid) use este encabezado:

 String credentials = proxyUsername + ":" + proxyPassword; String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); headers.put("Proxy-Authorization", auth);