Запрос API Imgur с использованием Java возвращает статус 400 - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь отправить GET запрос в Imgur API для загрузки изображения.

Когда я использую следующий код, я получаю ответ о состоянии 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();
}

Этот код основан на примерах API , предоставленных Imgur .

Может кто-нибудь сказать мне, что я делаю неправильно и как я могу решить проблему?

Спасибо.

1 Ответ

1 голос
/ 24 ноября 2011

В этом примере сервис imgur возвращает 400 Ответ о статусе неверного запроса с непустым телом из-за неверного ключа 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));

И, кстати, ваш пример это POST, а не GET, потому что вы отправляете параметры в теле запроса вместо URL.

...