我有一個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。
我出出主意:(