从HttpResponse获取内容和状态代码

Say*_*jee 13 java fluent apache-httpclient-4.x

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

response.returnResponse().getStatusLine().getStatusCode()
Run Code Online (Sandbox Code Playgroud)

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

response.returnContent().asBytes();
Run Code Online (Sandbox Code Playgroud)

response是一个类型的对象Response.但是,当我运行这个时,我得到:

java.lang.IllegalStateException: Response content has been already consumed.
Run Code Online (Sandbox Code Playgroud)

我怎么能绕过这个?

Sot*_*lis 14

双方Response#returnResponse()Response#returnContent()迫使HttpResponse InputStream被读取.由于您无法读取InputStream两次,因此库已放置标志并检查以断言InputStream尚未使用.

你不解决这个问题.你所做的是获取底层HttpResponse对象,并将状态代码和正文作为字节.

HttpResponse httpResponse = response.returnResponse();
httpResponse.getStatusLine().getStatusCode();
byte[] bytes = EntityUtils.toByteArray(httpResponse.getEntity());
Run Code Online (Sandbox Code Playgroud)