带有来自Java的多个对象的JSON POST请求

时间:2017-03-17 08:07:47

标签: java json api post licensing

我正在努力验证Java调用Gumroad API的许可证密钥。 Gumroad的帮助告诉我必须做这个电话:

curl https://api.gumroad.com/v2/licenses/verify
  \ -d "product_permalink=QMGY"
  \ -d "license_key=YOUR_CUSTOMERS_LICENSE_KEY"
  \ -X POST

为了从Java那里做到这一点,你写了这段代码:

URL url = new URL("https://api.gumroad.com/v2/licenses/verify");
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type", "application/json");

    String input = "\"product_permalink=QMGY\"&\"license_key=ABCDEF12-34567890-ABCDEF12-34567890\"";

    OutputStream os = conn.getOutputStream();
    os.write(input.getBytes());
    os.flush();

    if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) {
        throw new RuntimeException("Failed : HTTP error code : "
            + conn.getResponseCode());
    }

但是我收到400错误或404错误取决于我如何写输入字符串。我不确定是什么问题,但我想我可能没有正确编码输入字符串中的两个-d对象。

1 个答案:

答案 0 :(得分:0)

请求不正确。 首先,您使用Content-Type应用程序/ json发送。然而,curl发送它与application / x-www-form-urlencoded(see man page

您发送的数据也存在问题:

"product_permalink=QMGY"&"license_key=ABCDEF12-34567890"

应该是:

product_permalink=QMGY&license_key=ABCDEF12-34567890

使用以下内容:

    String input = "product_permalink=QMGY&license_key=ABCDEF12-34567890-ABCDEF12-34567890";

最后你泄漏资源使用try-with-resources