2011-08-18 5 views
6

Chcę używać aplementu apis ze środowiska Android dla mojego projektu. Próbuję zrobić uwierzytelnianie podstawowe następująco:Podstawowe uwierzytelnianie dostępu do repozytorium apis z androida

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

otrzymuję 400 Bad Request w wyjściu. Czy coś jest nie tak z adresem URL, z którego korzystam, czy coś jest nie tak?

Odpowiedz

6

Wygląda na to, że na pytanie odpowiedziało here. Trzeba użyć Base64.NO_WRAP flagę podczas kodowania parę nazwa-hasło:

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

Domyślnie util Android Base64 dodaje znak nowej linii na końcu kodowanego łańcucha. Spowoduje to unieważnienie nagłówków HTTP i spowoduje "Złe żądanie".

Flaga Base64.NO_WRAP mówi uytkownikowi, e utworzy zakodowany ciąg bez znaku nowego wiersza, zachowując w ten sposób nienaruszone nagłówki HTTP.

+1

Potwierdzony do pracy. Tak naprawdę potrzebowałem tego, aby dodać nagłówek HTTP Basic Auth do nagłówka Android DownloadManager. Wielkie dzięki, bardzo przydatne! –

0

REST API z wyjściem uwierzytelniania HTTP: - Mam wynik

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(); 
Powiązane problemy