2011-11-23 96 views
0

我試圖發送GET請求到Imgur API上傳圖像。使用Java的Imgur API請求返回400狀態

當我使用以下代碼時,我收到來自Imgur服務器的400狀態響應 - 根據,這意味着我缺少或具有不正確的參數。

我知道的參數是正確的,因爲我已經直接在瀏覽器URL(其成功上傳的圖像),對它們進行測試 - 所以我不能在代碼中正確地添加參數:

private void addImage(){ 
    String data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder.encode("http://www.lefthandedtoons.com/toons/justin_pooling.gif", "UTF-8"); 
    data += "&" + URLEncoder.encode("key", "UTF-8") + "=" + URLEncoder.encode("myPublicConsumerKey", "UTF-8"); 

    // Send data 
    java.net.URL url = new java.net.URL("http://api.imgur.com/2/upload.json"); 
    URLConnection conn = url.openConnection(); 
    conn.setDoOutput(true); 
    OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); 
    wr.write(data); 
    wr.flush(); 

    // Get the response 
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); 
    String line; 
    while ((line = rd.readLine()) != null) { 
     Logger.info(line); 
    } 
    wr.close(); 
    rd.close(); 
} 

此代碼基於API示例provided by Imgur

任何人都可以告訴我我做錯了什麼,我可以如何解決問題?

謝謝。

+1

你有沒有試過包括可選的'type'參數值爲'url'? –

+0

另外,僅僅爲了它(因爲一切看起來都正確),嘗試不帶.json後綴,並查看它是否適用於XML響應。在wr.flush做什麼之後, –

+0

會添加conn.connect()嗎? – MeBigFatGuy

回答

1

在此示例中,imgur服務返回400因爲不正確的API密鑰的非空體Bad Request狀態響應。如果出現不成功的HTTP響應,請從錯誤輸入流中讀取響應主體。例如:

// Get the response 
InputStream is; 
if (((HttpURLConnection) conn).getResponseCode() == 400) 
    is = ((HttpURLConnection) conn).getErrorStream(); 
else 
    is = conn.getInputStream(); 

BufferedReader rd = new BufferedReader(new InputStreamReader(is)); 

而且,你的榜樣是POST方式,得不到,因爲你是在請求體發送的參數,而不是URL的。

+0

謝謝DV13 - 這幫了很大忙。我的確在發送郵件,所以謝謝你指出。使用錯誤流,我發現我的密鑰存在問題,所以我將深入挖掘。再次感謝這段代碼 - 它幫我挽回了我的頭髮! –