org.apache.http.HttpResponse 获取entry Attempted read from closed stream
时间: 2023-11-30 22:05:08 浏览: 193
当使用`org.apache.http.HttpResponse`对象的`getEntity().getContent()`方法获取返回的响应内容时,如果该响应内容的流已经被关闭,再次尝试读取流中的数据就会抛出"Attempted read from closed stream"异常。
解决这个问题的方法是,在读取完响应内容后,手动关闭响应内容的流。代码示例:
```
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
InputStream inputStream = entity.getContent();
try {
// 读取流中的数据
} finally {
inputStream.close();
}
```
这样,在`finally`块中关闭流,即使在读取过程中抛出了异常,也能保证流被正确关闭,避免了"Attempted read from closed stream"异常的发生。
相关问题
org.apache.http.HttpResponse 获取entry多次解决方案
当使用`org.apache.http.HttpResponse`对象的`getEntity()`方法获取返回的响应内容时,如果多次调用该方法,会抛出"Content has been consumed"异常,提示响应内容已经被消耗过了。
解决这个问题的方法是,在获取响应内容之后,将其保存下来,避免多次获取。代码示例:
```
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
// 只在第一次获取响应内容时将其保存下来
if (entity != null && !entity.isRepeatable()) {
entity = new BufferedHttpEntity(entity);
response.setEntity(entity);
}
InputStream inputStream = entity.getContent();
try {
// 读取流中的数据
} finally {
inputStream.close();
}
```
这样,在第一次获取响应内容时,将其保存下来,后续再次获取时直接使用保存好的内容即可,避免了"Content has been consumed"异常的发生。需要注意的是,在保存响应内容时,需要判断其是否可重复,如果不可重复,则需要将其包装成可重复的`BufferedHttpEntity`对象再保存,否则无法多次读取响应内容。
org.apache.http.httpresponse
org.apache.http.HttpResponse是一个Java类,它表示HTTP协议中的响应消息。它包含了响应的状态码、头部信息和响应体等内容。这个类是Apache HttpComponents项目中的一部分,它提供了一个可扩展的、高效的HTTP客户端和服务器端实现。
阅读全文