从HttpURLConnection中的getErrorStream返回的InputStream中获取从服务器发送的有用数据

时间:2013-03-29 07:27:21

标签: java inputstream httpurlconnection

当我在HttpURLConnection中调用getInputStream()方法时,它返回一个HTTP异常,并使用此策略来捕获该异常。

try {
   con.getInputStream();
} catch (IOException e) {
   resStream = con.getErrorStream();
}

但是,我需要获取服务器发送给resStream的有用数据,因为JavaDoc如下所示。 “如果连接失败但服务器仍然发送了有用的数据,则返回错误流。”

有没有办法从getErrorStream()返回的InputStream中获取响应消息(如果返回的值不为null且返回了有效的响应)?

1 个答案:

答案 0 :(得分:1)

您可以将此字节流包装到字符流中,然后只读取错误信息。

InputStreamReader isr = new InputStreamReader(resStream);
BufferedReader br = new BufferedReader(isr);
StringBuffer buf = new StringBuffer();
String line = null;
while((line = buf.readLine()) != null) {
    buf.append(line);
}
//assume you have a log object, you'd better not use System.out.println()
log.error(buf.toString());
//do not forget to close all the stream

然后,您可以从服务器端获取堆栈跟踪。我希望这会有所帮助。