从 HttpResponse 获取内容和状态代码



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

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

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

response.returnContent().asBytes();

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

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

我该如何解决这个问题?

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

你无法绕过这个。您要做的是获取基础HttpResponse对象,并以字节形式获取状态代码和正文。

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

相关内容

最新更新