2013-01-08 43 views
2

我有一個grails控制器,base64解碼授權標頭。我使用CURL從PHP腳本發送這個消息。Grails Base64解碼的授權標頭在解碼時格式不正確

curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_USERPWD, "[email protected]:india123"); 

我的Grails控制檯記錄顯示:

Authorization raw: Basic dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=, isBase64: true 
Authorization decoded: ´"q—ïÕ—•πë•Ñ¿≈—ïÕ–πçΩ¥È•πë•Ñƒ»Ã 

在上述情況下,我使用的是共享的Base64類,但將使用Groovy內置decodeBase64產生同樣的結果。

進入的授權原始數據是正確的。如果我複製這個並通過PHP的ecode推送它,那麼它解碼正確。

echo base64_decode('dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM='); 

如果我將字符串直接複製到控制器中,例如,

def decode = new String(Base64.encodeBase64("dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=")) 

然後這也正確地解碼。

我通過請求

def auth = request.getHeader("Authorization") 

獲取標頭,我測試它是一個有效的base64字符串

Base64.isBase64(auth) 

這只是失敗的解碼。我試圖改變解碼上的編碼。

DEF解碼=新字符串(auth.decodeBase64(), 「UTF-8」)

以及其它編碼方式,如ISO-8859-1和Windows 1252而是返回不同的格式錯誤的字符串在每次。

我也試過在CURL請求上手動設置Accept-Encoding。

我出出主意:(

回答

1

這是因爲「基本法」已被列入爲getHeader返回值的一部分。如果我剝這一關它的工作原理。Base64.isBase64只檢查字符是base64字母表,所以「基本」一定是。