从HttpResponse获取内容和状态代码

时间:2013-12-31 23:53:44

标签: java apache-httpclient-4.x fluent

我正在使用apache的HttpClient(通过Fluent API)。当我收到响应对象时,我首先这样做:

response.returnResponse().getStatusLine().getStatusCode()

如果状态代码是4xx或5xx,我会抛出异常,或者我返回内容:

response.returnContent().asBytes();

这里的responseResponse类型的对象。但是当我运行这个时,我得到了:

java.lang.IllegalStateException: Response content has been already consumed.

我怎样才能解决这个问题?

1 个答案:

答案 0 :(得分:13)

Response#returnResponse()Response#returnContent()都强制要求HttpResponse InputStream。由于您无法读取InputStream两次,因此库已放置标记并检查以确定InputStream尚未消耗。

你没有解决这个问题。你所做的是获取基础HttpResponse对象,并将状态代码和正文作为字节。

HttpResponse httpResponse = response.returnResponse();
httpResponse.getStatusLine().getStatusCode();
byte[] bytes = EntityUtils.toByteArray(httpResponse.getEntity());