当我们有很长的密码时,我们在HttpURLConnection +基本身份验证方面遇到了问题。
以下是示例代码:
URL url = new URL("http://localhost/data.json");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod(method);
String authString = clientId + ":" + clientSecret;
BASE64Encoder encoder = new BASE64Encoder();
String authHeader = encoder.encode(authString.getBytes());
conn.setRequestProperty("Authorization", authHeader);
conn.setRequestProperty("Accept", "application/json");我们试着用
String authString = clientId + ":" + clientSecret;
authString = "" + javax.xml.bind.DatatypeConverter.printBase64Binary(authString.getBytes());但在这方面不走运。
具有基本身份验证的HttpURLConnection与一定长度的密码工作良好,但使用过长的密码我们有问题。返回的错误码是400
注意:这与使用Paypal集成https://developer.paypal.com/webapps/developer/docs/integration/direct/log-in-with-paypal/detailed/#making-first-call登录相关
我们的示例代码(由PayPal提供)也不起作用。
提前谢谢你。
发布于 2013-07-22 14:26:15
我遇到的问题是由于用户名和密码太长。
如果我使用下面的代码,它工作得很好
byte[] encodedBytes = org.apache.commons.codec.binary.Base64.encodeBase64(passwordString.getBytes("UTF-8"));
String encodedString = new String(encoded, "UTF-8");和
headers.put("Authorization","Basic“+ encodedString);
发布于 2013-07-11 00:06:37
试着发布一个帖子。
如果你在本地服务器上测试,确保它在最大URL大小、最大参数长度、最大POST头大小等方面没有任何限制。请查看服务器端日志。
这可能不是问题所在,但这条语句"authString.getBytes()“中可能存在错误。您将字符串转换为基于系统默认编码的字节,该编码取决于JVM/OS/Locale--您应该将显式编码传递给getBytes()。
发布于 2013-07-11 00:20:36
您应该检查成功的身份验证,即。其中web浏览器具有请求检查器(即,chrome)或仅使用wireshark。
因此,您可以看到发送到服务器的请求消息的类型。
从这一点开始,您可以检查您的代码是否提供了相同类型的请求,如果它们不相同,您至少可以找到错误所在。
尽管对于基本身份验证长度没有规范强制限制,但仍然存在一些与平台相关的限制,如下所示:Is there a practical HTTP Header length limit?
希望你觉得它有用。
https://stackoverflow.com/questions/17575497
复制相似问题