我正在努力验证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对象。
答案 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