【问题标题】:Imgur API request using Java returns 400 status使用 Java 的 Imgur API 请求返回 400 状态
【发布时间】:2011-11-23 23:06:26
【问题描述】:

我正在尝试向 Imgur API 发送 GET 请求以上传图片。

当我使用以下代码时,我会收到来自 Imgur 服务器的400 状态响应 - 根据Imgur error documentation,这意味着我丢失或参数不正确。

我知道参数是正确的,因为我直接在浏览器 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

谁能告诉我我做错了什么以及如何解决这个问题?

谢谢。

【问题讨论】:

  • 您是否尝试过包含可选的type 参数,其值为url
  • 另外,只是为了它(因为一切看起来都正确),尝试不使用 .json 后缀,看看它是否适用于 XML 响应。
  • 在 wr.flush 之后添加 conn.connect() 有什么作用吗?

标签: java get imgur


【解决方案1】:

在此示例中,imgur 服务由于 API 密钥不正确而返回 400 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,而不是 GET,因为您发送的是请求正文中的参数,而不是 URL。

【讨论】:

  • 感谢 DV13 - 这帮助很大。我确实在发送一个帖子,所以感谢您指出这一点。使用错误流,我发现我的密钥有问题,所以我要深入挖掘。再次感谢这段代码 - 它让我的头发更长一点!
猜你喜欢
  • 2015-12-08
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多