【发布时间】:2015-12-18 14:09:36
【问题描述】:
为了使用 API 进行身份验证,我创建了一个包含用户电子邮件和密码的编码字符串,如下所示:
String userpass = u[0].getEmail() + ":" + u[0].getPassword();
userpass = Base64.encodeToString(userpass.getBytes("UTF-8"), Base64.DEFAULT);
String basicAuth = "Basic " + userpass;
HttpUrlConnection conn = new HttpUrlConnection();
conn.setRequestProperty("Authorization", basicAuth);
问题在于,一旦生成了这个字符串,就会添加新的行和空格,这使得字符串看起来像这样:
授权:基本 dHJpc3RhbkBjb3BheS5jb206MTA3ZDM0OGJmZjQzN2M5OTlhOWZmMTkyYWRjYjc4Y2IwM2I4ZGRj 吴==
这导致 API 只能看到第一部分(而不是“Ng==”部分),从而导致服务器认为电子邮件和密码有问题。
我已经尝试过所有可能的 String.Replace 和 ReplaceAll 形式,但似乎没有帮助。
一个建议是在 API 本身上修复字符串,但由于 API 没有接收到整个字符串,这是没有选择的。
欢迎提出建议,先谢谢了
【问题讨论】:
-
是什么让你说有换行符和空格?你是怎么检查的?显示您打印的代码
-
当我从 Base64 解码你的字符串时,输出是'tristan@copay.com:107d348bff437c999a9ff192adcb78cb03b8ddc6'。这是正确的吗?
-
是的,密码是密码“Azerty123”的Sha1哈希我还添加了一个android studio的截图,显示了conn.getRequestProperty的lof
-
这是正常行为。来自RFC4648
MIME enforces a limit on line length of base 64-encoded data to 76 characters。 -
你从哪里得到这个
Base64类? Java 8 引入了java.util.Base64,但你没有使用它(它没有encodeToString()方法)......那么你在使用谁的Base64?
标签: java string authorization httpurlconnection