将curl命令转换为Java时的响应403

时间:2014-03-27 22:11:38

标签: java php http curl http-headers

我遇到了将curl命令转换为Java的问题。下面是我的卷曲

curl https://api.XXXX.com/authorizations \
-u john:doe -d '' \
-H 'Accept: application/vnd.drivr.v2+json' \
-H 'Content-type: application/json'

我尝试过这种方式的Java等等

     String stringUrl = "https://api.XXXX.com/authorizations";
        URL url = new URL(stringUrl);
        URLConnection uc = url.openConnection();

        String userpass = "john" + ":" + "doe";
        //String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
        String basicAuth = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary(userpass.getBytes("UTF-8"));

        uc.setRequestProperty("Authorization", basicAuth);
        uc.setRequestProperty("Accept", "application/vnd.drivr.v2+json");
        uc.setRequestProperty("Content-type", "application/json");

        System.out.println("url is: "+uc.getURL().toString()+" "+basicAuth);
        InputStream inputStreamReader = uc.getInputStream();

这已经差不多连续两天了。它总是给我403响应。我不知道我哪里错了。任何帮助,将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

您的注释行看起来比XML绑定更好。

尝试将其修改为

String basicAuth = "Basic " + new String(Base64.encodeBase64(userpass.getBytes()));

同样在将来,使用“-v”运行curl命令以查看它正在进行的请求标头。然后,您可以检查其中的Authorization标头,并将其与您在Java代码中生成的标头进行比较。

答案 1 :(得分:0)

我可以看到你的curl命令有-d ''参数。这意味着http POST请求。

但是你的java代码正在向服务器发出GET请求。因此,请更改您的Java代码,以便它执行POST请求。它会解决你的问题。