¿Cómo hacer la autenticación HTTP en android?

Estoy revisando la clase org.apache.http.auth. ¿Alguna más referencia o ejemplo si alguien tiene?

No he encontrado ese paquete en particular anteriormente, pero dice que es para la autenticación HTTP del lado del cliente, que he podido hacer en Android usando las API de java.net , así:

 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(); 

Obviamente tu getPasswordAuthentication () probablemente debería hacer algo más inteligente que devolver una constante.

Si intentas realizar una solicitud con un cuerpo (por ejemplo, POST ) con autenticación, ten cuidado con el problema 4326 de Android . He vinculado una solución sugerida a la plataforma allí, pero hay una solución simple si solo quieres la autenticación básica: no molestes con Authenticator, y en cambio haz esto:

 c.setRequestProperty("Authorization", "basic " + Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP)); 

Para mí, funcionó,

 final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP); 

Apache HttpCLient:

 request.setHeader("Authorization", basicAuth); 

HttpUrlConnection:

 connection.setRequestProperty ("Authorization", basicAuth); 

Usted puede insertar manualmente el encabezado http para solicitar:

 HttpGet request = new HttpGet(...); request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes())); 

El método manual funciona bien con import android.util.Base64, pero asegúrese de configurar Base64.NO_WRAP en la encoding de llamada:

 String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP )); connection.setRequestProperty ("Authorization", basicAuth); 

Para mis proyectos de Android, he utilizado la biblioteca Base64 desde aquí:

http://iharder.net/base64

Es una biblioteca muy extensa y hasta ahora no he tenido problemas con ella.

Esto funciona para mí

  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();