0

GET画像をアップロードするためにImgurAPIにリクエストを送信しようとしています。

次のコードを使用すると400、Imgurサーバーからステータス応答を受け取ります。これは、Imgurエラーのドキュメントによると、パラメーターが欠落しているか、正しくないことを意味します。

ブラウザの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();
}

このコードは、Imgurが提供するAPIの例に基づいています。

誰かが私が間違っていることと、問題を解決する方法を教えてもらえますか?

ありがとう。

4

1 に答える 1

1

このサンプルでは、​​imgurサービスは 400 Bad Request ステータス レスポンスを返しており、API キーが正しくないため、本文が空ではありません。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));

ところで、あなたの例は GET ではなく POST です。これは、URL の代わりにリクエスト本文でパラメーターを送信しているためです。

于 2011-11-23T23:51:06.137 に答える