Sto guardando attraverso esempi e codice ma non vedo nulla di implementato. È possibile in questa fase?Come si usa l'autenticazione di base con Volley su Android?
risposta
Sì, è possibile. Devi eseguire l'override di Request.getHeaders(). Sono pigro e ho usato HttpHeaders e HttpAuthentication da Spring per Android ma puoi semplicemente creare l'intestazione auth e restituirla dal metodo. Da getHeaders() è possibile restituire l'intestazione auth per l'autenticazione di base. Questa è una richiesta di esempio con autenticazione di base.
public class GetUser extends Request<User> {
private static final String TAG = GetUser.class.getName();
private Response.Listener<User> mListener;
private ObjectMapper mMapper = new ObjectMapper();
public GetUser(Response.ErrorListener errorListener, Response.Listener<User> listener){
super(Method.GET, PoisUtils.BASE_URL + "/users", errorListener);
mListener = listener;
}
@Override
protected Response<User> 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<String, String> getHeaders() throws AuthFailureError {
return AuthUtils.buildAuthHeaders().toSingleValueMap();
}
}
Ed ecco come costruisco le intestazioni auth
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;
}
Per coloro che non vogliono usare molla per Android solo per questo, ecco come fare.
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
HashMap<String, String> params = new HashMap<String, String>();
String creds = String.format("%s:%s","USERNAME","PASSWORD");
String auth = "Basic " + Base64.encodeToString(creds.getBytes(), Base64.DEFAULT);
params.put("Authorization", auth);
return params;
}
Si noti che potrebbe essere necessario utilizzare Base64.NO_WRAP
invece di Base64.DEFAULT
per questo al lavoro. Come indicato nei commenti.
API 8+
Questo è veramente buono in quanto la dimensione finale dell'APK è molto importante per i piccoli progetti. – slott
Vale la pena notare che avevo bisogno di usare Base64.NO_WRAP invece di Base64.DEFAULT per far sì che funzionasse correttamente. – Logiraptor
@Logiraptor Il tuo commento mi ha aiutato a correggere 400 errori su dispositivi Andrpiod 2.3. Quale può essere una ragione del problema? – dimetil
Per un'autorizzazione proxy (come Squid) utilizzare questa intestazione:
String credentials = proxyUsername + ":" + proxyPassword;
String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headers.put("Proxy-Authorization", auth);
- 1. Android Volley ImageLoader - Come utilizzare l'autorizzazione HTTP di base?
- 2. linea Android richiesta con Volley
- 3. Modello Android Volley + Loader?
- 4. Richiesta Android Volley PUT
- 5. Android Studio + Volley = NoClassDefFound?
- 6. Volley Android - modifiche di orientamento
- 7. Volley Android: ImageRequest deprecato
- 8. Crittografia di base su Android
- 9. Risposta JSONArray con Volley per Android
- 10. Come si usa Resources.getFraction()?
- 11. Android Volley ImageLoader - Parametro BitmapLruCache?
- 12. Android Volley error.getMessage() è vuoto
- 13. Come usare Stetho con Volley?
- 14. Android volley DefaultRetryPolicy non funzionare come previsto
- 15. Come utilizzare setEntity in Android Volley?
- 16. Parse Android Volley JSONArray risposta
- 17. Volley Android, duplicato Set-Cookie è sovrascritto
- 18. Gestione cookie di sessione in Android Volley
- 19. Come si usa cx_freeze?
- 20. Come multipart data using Android Volley
- 21. Come si usa offsetof() su una struct?
- 22. Come si usa lodash con Ionic 2?
- 23. Cache di Volley Android con diverse richieste POST
- 24. Come si usa unittest.TestResult?
- 25. Come si usa Markdown con Meteor
- 26. Come si usa memcache con PHP
- 27. volley invio dei dati Android due volte
- 28. ViewDragHelper: come si usa?
- 29. CakeEmail - Come si usa?
- 30. come si usa mysql_data_seek con PDO?
Grazie per la risposta. Tuttavia, sembra una caratteristica molto comune/di base, e penso che una biblioteca come la pallavolo dovrebbe implementarla in qualche modo in un modo più semplice. Sto provando questa libreria, e sembra promettente (davvero entusiasta di una buona libreria HTTP nella cache), ma sto trovando alcune parti che non hanno molto senso: come vorrei la parte parsing (json, xml. ..) essere parte dell'ascoltatore e non della richiesta, in questo modo potrei creare la mia richiesta di base che aggiungerà queste intestazioni tutto il tempo. Forse dovrebbe essere RequestQueue quello con alcune opzioni predefinite (intestazioni) ... Alcune idee. – LocoMike
Non sono sicuro che sia ciò che si vuole fare, ma è possibile creare qualcosa come questo https://gist.github.com/alexmazza/5659606 con il metodo getHeaders() implementato. Sto usando jackson lì, ma potresti usare Gson o qualsiasi altra cosa, e poi usare sempre quella classe come classe base per le tue richieste autenticate – alex
Sì, ma se voglio ottenere alcuni dati JSON e più tardi alcuni dati xml, io dovrebbe replicare la logica, o creare una classe base, che abbia il codice delle intestazioni, e quindi dovrei creare 2 sottoclassi, e non sarei in grado di usare la JsonRequest predefinita, ecc ... Per me, sembra una risposta e le richieste dovrebbero essere in classi diverse (l'analisi dovrebbe appartenere al listener) in modo da poterle mescolare. Problemi di ereditarietà! ;) Grazie comunque per la risposta. – LocoMike