在Android的開發上,搭配Restful Service去取得資料時,通常會使用HttpClient加上HttpGet去向Server抓取資料來源,例如說下面這樣
try { HttpResponse response = client.execute(get); StatusLine statusLine = response.getStatusLine(); if(statusLine.getStatusCode() == HttpStatus.SC_OK){ HttpEntity entity = response.getEntity(); ByteArrayOutputStream out = new ByteArrayOutputStream(); entity.writeTo(out); out.close(); result = out.toString(); } } catch (IOException ex){ result = null; }
而在Restful Service的安全性上面,驗證方式通常會採用基本驗證(在header中加入驗證資訊)加上https來做(這篇不會提到https的部分);而加入驗證資訊的部分會像是這樣的方式
String encoding = Base64.encodeToString((userName+":"+userPwd).getBytes(),Base64.NO_WRAP); HttpClient client = new DefaultHttpClient(); HttpGet get = new HttpGet(requestUrl); get.addHeader("Authorization","Basic "+encoding);
這篇筆記的重點就是在Base64編碼的部分,注意到上面編碼的部分,參數是下Base64.No_WRAP,也就是整行資料輸出,不要做任何處理,而一般情況下我們可能會用很直覺的方式下了Base64_Default的參數進去,而當你用default的方式去處理時,會多了一些換行的東西,像是下圖用WireShark抓出來的header
因此產生了Bad Request的結果,這邊筆記一下也給大家參考看看了