【问题标题】:getErrorStream: stream closed, getInputStream: worksgetErrorStream:流关闭,getInputStream:有效
【发布时间】:2016-01-28 20:17:28
【问题描述】:

我的代码有一个奇怪的问题:

URL url = new URL(searchUrlPOST.replace("%accessToken", accessToken));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");

OutputStream os = conn.getOutputStream();
os.write(json.getBytes("UTF-8"));
os.close();

// read the response
InputStream in = new BufferedInputStream(conn.getInputStream());

只要服务器以正确的状态代码响应,它就可以正常工作。但是,如果他以 400 之类的方式回应,而我将 conn.getInputStream() 替换为 conn.getErrorStream(),我会得到一个

线程“主”java.io.IOException 中的异常:流已关闭

怎么会?

【问题讨论】:

  • 你用 curl 或类似的东西试过了吗?

标签: java stream httpconnection


【解决方案1】:

我不确定,但是:

请确认

searchUrlPOST.replace("%accessToken", accessToken)

返回一个有效的url,这个错误可以通过在“new Url(String url)”使用一个无效的url来抛出

【讨论】:

  • 它确实返回了 400 错误,这很好,但我仍然需要它的内容。
  • A 400 错误表示服务器端出现问题,请检查您的服务器日志是否有错误。如果你愿意,我也可以帮助你:)
  • 先生,错误 400 并不意味着服务器有问题,500 确实如此。除此之外,正如我所说,该错误是预期的,并且仍然响应我需要获得的主体。这是这里唯一的问题。
  • 抱歉,错误 400 表示请求错误,您使用的请求参数是什么,所有值都经过 URL 编码吗?
  • 不要粗鲁,但请阅读我需要的内容。导致 400 的问题是什么并不重要,我只想获取服务器返回的错误消息。忽略其他一切。
猜你喜欢
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多