有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我在将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) 个答案

  1. # 1 楼答案

    你的注释行看起来比XML绑定好得多

    尝试将其修改为

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

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

  2. # 2 楼答案

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

    但是java代码正在对服务器执行GET请求。因此,更改java代码,使其执行POST请求。它会解决你的问题