2011-08-18 9 views
6

Quiero usar assembla apis del entorno de Android para mi proyecto. que estoy tratando de hacer la autenticación básica de la siguiente manera:Autenticación básica para acceder a las aplicaciones de reposo de android

String authentication = "username:password"; 
String encoding = Base64.encodeToString(authentication.getBytes(), 0);  

    URL url = new URL("https://www.assembla.com/"); 

     conn = (HttpURLConnection) url.openConnection(); 

     conn.setRequestMethod("GET"); 

     conn.setRequestProperty("Authorization", "Basic " + encoding); 
     conn.setDoOutput(true); 

     conn.connect(); 
     System.out.println(conn.getResponseCode()); 

     System.out.println(conn.getResponseMessage()); 

que estoy recibiendo y 400 Solicitud incorrecta de la producción. ¿Hay algún problema con la URL que estoy usando o hay algún otro problema?

Respuesta

6

Parece que la pregunta fue respondida here. Es necesario utilizar la bandera Base64.NO_WRAP cuando se codifica par nombre de usuario-contraseña:

String encoding = Base64.encodeToString(authentication.getBytes(), Base64.NO_WRAP); 

Por defecto, la base 64 util Android añade un carácter de nueva línea al final de la cadena codificada. Esto invalida los encabezados HTTP y causa la "Solicitud incorrecta".

La bandera Base64.NO_WRAP cuenta la util para crear la cadena codificada sin el carácter de nueva línea manteniendo así las cabeceras HTTP intacta.

+1

confirmada para trabajar. De hecho, necesitaba esto para agregar HTTP Basic Auth a Android DownloadManager Request header. Muchas gracias hombre, muy muy útil! –

0

API REST con la salida de autenticación HTTP: - Tengo el resultado

String authentication = "username:password"; 

String encoding = Base64.encodeToString(authentication.getBytes(), Base64.NO_WRAP); 


HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

conn.setRequestMethod("GET"); 

conn.setDoOutput(true); 

conn.setRequestProperty ("Authorization", "Basic " + encoding); 

    conn.connect(); 

OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 

wr.write(data); 

wr.flush(); 

    reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

    StringBuilder sb = new StringBuilder(); 

    String line = null; 

while((line = reader.readLine()) != null) 
         { 

    // Append server response in string 

    sb.append(line + "\n"); 


    } 

Content = sb.toString(); 
Cuestiones relacionadas