httpurlconnection与基本身份验证长密码

时间:2013-07-10 16:01:16

标签: java paypal

当我们有冗长的密码时,我们遇到了HttpURLConnection + Basic身份验证的问题。

以下是样本代码:

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与Basic Auth一起使用一定长度的密码,但是我们有问题。返回的错误代码是400

注意:这与使用Paypal集成登录https://developer.paypal.com/webapps/developer/docs/integration/direct/log-in-with-paypal/detailed/#making-first-call

有关

我们拥有的示例代码(由PayPal提供)也无效。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

我遇到的问题是由于用户名,密码很长。

如果我使用下面的代码,它可以正常工作

    byte[] encodedBytes = org.apache.commons.codec.binary.Base64.encodeBase64(passwordString.getBytes("UTF-8"));
    String encodedString = new String(encoded, "UTF-8");

headers.put(“授权”,“基本”+ encodedString);

答案 1 :(得分:0)

尝试发布。

如果您使用本地服务器对此进行测试,请确保它对最大URL大小,最大参数长度,最大POST标头大小等没有任何限制。检查服务器端日志。

这可能不是问题,但是这个语句中有一个可能的错误“authString.getBytes()”。您正在根据系统默认编码将字符串转换为字节,这取决于JVM / OS / Locale--您应该将显式编码传递给getBytes()。

答案 2 :(得分:0)

您应该检查成功的身份验证,即。使用具有请求检查器(即chrome)的web浏览器或仅使用wireshark。

因此,您可以看到向服务器发送了哪种请求消息。

从这一点开始,您可以检查您的代码是否提供了相同类型的请求,如果它们不相同,您至少可以找到错误的内容。

虽然即使没有基本身份验证长度的规范限制,但仍存在一些与平台相关的限制,如下所述:Is there a practical HTTP Header length limit?

希望你觉得它很有用。

相关问题