2011-08-18 20 views
6

Tôi muốn sử dụng apis assembla từ môi trường Android cho dự án của mình. Tôi đang cố thực hiện xác thực cơ bản như sau:Xác thực cơ bản để truy cập apis còn lại của assembla từ 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()); 

Tôi nhận được 400 và Yêu cầu không hợp lệ ở đầu ra. có điều gì đó sai với URL mà tôi đang sử dụng hoặc một số điều khác đang xảy ra không?

Trả lời

6

Có vẻ như câu hỏi đã được trả lời here. Bạn cần phải sử dụng Base64.NO_WRAP cờ khi mã hóa cặp tên người dùng mật khẩu:

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

Theo mặc định, util Android Base64 cho biết thêm một ký tự xuống dòng để kết thúc chuỗi mã hóa. Điều này làm mất hiệu lực tiêu đề HTTP và gây ra "Yêu cầu không hợp lệ".

Cờ Base64.NO_WRAP báo cho util biết để tạo chuỗi được mã hóa mà không có ký tự dòng mới, do đó giữ nguyên tiêu đề HTTP.

+1

Xác nhận để làm việc. Tôi thực sự cần điều này để thêm HTTP Basic Auth vào tiêu đề Yêu cầu Trình quản lý tải xuống Android. Cảm ơn rất nhiều người, rất rất hữu ích! –

0

API REST với HTTP Authentication Output: - Tôi đã nhận kết quả

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(); 
Các vấn đề liên quan