2017-03-17 52 views
-2

我正在從Java調用Gumroad API來驗證許可證密鑰。 Gumroad幫忙告訴我必須這樣做呼叫:來自Java的多個對象的JSON POST請求

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

爲了做到這一點從Java,Y寫了這個代碼:

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

該請求不正確。 首先,您使用Content-Type application/json發送消息。然而捲曲與應用程序在發送/ X WWW的形式,進行了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

+0

它沒有工作:錯誤404。 – Larry

+0

也許是因爲許可證不存在提供的產品,如響應體中所述??? – JEY

+0

最後我明白了! (請幫助,謝謝)。您告訴我必須使用application/x-www-form-urlencoded,但字符串輸入必須爲:\t \t String input =「product_permalink =」+ URLEncoder.encode(「QMGy」)+「&license_key =」+ URLEncoder.encode( 「ABCDEF12-34567890-ABCDEF12-34567890」); – Larry