从 HttpResponse 获取内容和状态代码

2022-09-04 03:02:04

我正在使用apache的HttpClient(通过Fluent API)。当我取回响应对象时,我首先执行以下操作:

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

如果状态代码为 4xx 或 5xx,我将引发异常,或者返回内容:

response.returnContent().asBytes();

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

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

我该如何解决这个问题?


答案 1

两者都强制读取。由于您无法读取两次,因此库已放置标志和检查以断言尚未使用。Response#returnResponse()Response#returnContent()HttpResponseInputStreamInputStreamInputStream

你不能绕过这个。您要做的是获取基础对象,并将状态代码和正文作为字节获取。HttpResponse

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

答案 2

推荐