Come fare l'autenticazione HTTP in Android?
-
21-09-2019 - |
Domanda
Sto controllando la classe org.apache.http.auth. Qualche altro riferimento o esempio se qualcuno ha?
Soluzione
Non ho mai incontrato quel particolare pacchetto prima, ma dice che è per l'autenticazione HTTP lato client, che sono stato in grado di fare su Android usando il java.net
API, come così:
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("myuser","mypass".toCharArray());
}});
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setUseCaches(false);
c.connect();
Ovviamente la tua GetPasswordAuthentication () dovrebbe probabilmente fare qualcosa di più intelligente che restituire una costante.
Se stai cercando di fare una richiesta con un corpo (ad es. POST
) con autenticazione, attenzione a Numero Android 4326. Ho collegato una soluzione suggerita alla piattaforma lì, ma c'è una semplice soluzione se vuoi solo l'autenticazione di base: non preoccuparti di autenticatore e invece lo fai:
c.setRequestProperty("Authorization", "basic " +
Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));
Altri suggerimenti
Per me, ha funzionato
final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);
Apache httpclient:
request.setHeader("Authorization", basicAuth);
Httpurlconnection:
connection.setRequestProperty ("Authorization", basicAuth);
È possibile inserire manualmente l'intestazione HTTP per richiedere:
HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));
Il metodo manuale funziona bene con import android.util.base64, ma assicurati di impostare base64.no_wrap sulla chiamata ENCODE:
String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);
For my Android projects I've used the Base64 library from here:
It's a very extensive library and so far I've had no problems with it.
This works for me
URL imageUrl = new URL(url);
HttpURLConnection conn = (HttpURLConnection) imageUrl
.openConnection();
conn.setRequestProperty("Authorization", "basic " +
Base64.encode("username:password".getBytes()));
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is = conn.getInputStream();