我有一个 grails 控制器,它 base64 对授权标头进行解码。我使用 CURL 从 PHP 脚本发送了这个。
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "testindia01@test.com:india123");
我的 grails 控制台日志显示:
Authorization raw: Basic dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=, isBase64: true
Authorization decoded: ´"q—ïÕ—•πë•Ñ¿≈—ïÕ–πçΩ¥È•πë•Ñƒ»Ã
在上述情况下,我使用的是 Commons Base64 类,但使用 Groovy 内置的 decodeBase64 会产生相同的结果。
进来的 Authorization raw 是正确的。如果我复制它并通过 PHP 的 ecode 推送它,那么它会正确解码。
echo base64_decode('dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=');
如果我将字符串直接复制到控制器中,例如
def decode = new String(Base64.encodeBase64("dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM="))
然后这也正确解码。
我通过请求获取标头
def auth = request.getHeader("Authorization")
我测试它是一个有效的base64字符串
Base64.isBase64(auth)
只是解码失败。我试过改变解码的编码。
def 解码 = new String(auth.decodeBase64(), "UTF-8")
以及 ISO-8859-1 和 Windows-1252 等其他编码,但每次都会返回不同的格式错误的字符串。
我还尝试在 CURL 请求上手动设置 Accept-Encoding。
我没有想法:(