Java 具有基本身份验证长密码的httpurlconnection
当我们有很长的密码时,我们遇到了HttpURLConnection+基本身份验证的问题 以下是示例代码:Java 具有基本身份验证长密码的httpurlconnection,java,paypal,Java,Paypal,当我们有很长的密码时,我们遇到了HttpURLConnection+基本身份验证的问题 以下是示例代码: URL url = new URL("http://localhost/data.json"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(method); String authString = clientId + ":" + clientSecre
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集成登录有关
我们的示例代码(由贝宝提供)也不起作用
提前谢谢你。试试一篇帖子
如果您使用本地服务器进行测试,请确保它在最大URL大小、最大参数长度、最大POST头大小等方面没有任何限制。请检查服务器端日志
这可能不是问题所在,但此语句“authString.getBytes()”中可能存在错误。您正在根据系统默认编码将字符串转换为字节,这取决于JVM/OS/Locale——您应该将显式编码传递给getBytes() 您应该检查成功的身份验证,即使用具有请求检查器(即chrome)的web浏览器或仅使用wireshark 因此,您可以查看发送到服务器的请求消息的类型 从这一点开始,您可以检查您的代码是否提供了相同类型的请求,如果它们不相同,您至少可以找到问题所在 尽管基本认证长度没有规范强制限制,但仍存在一些与平台相关的限制,如下所述:
希望你觉得它有用。我面临的问题是用户名、密码太长 如果我使用下面的代码,它可以正常工作
byte[] encodedBytes = org.apache.commons.codec.binary.Base64.encodeBase64(passwordString.getBytes("UTF-8"));
String encodedString = new String(encoded, "UTF-8");
及
headers.put(“授权”、“基本”+编码字符串) 响应是否包含状态代码400以外的任何内容?通常,错误响应的主体将包含一条消息,提供有关错误的更多详细信息。