This question already has answers here:
How to get HttpClient returning status code and response body?
(5个答案)
2年前关闭。
我在一些示例代码中使用Apache's HttpClient Fluent Facade in Java供开发人员扩展。他们真的很喜欢流利的门面,它具有以下功能:
另外,我可以通过调用以下方式获取状态代码:
不幸的是,在某些情况下,除了正文以外,我还需要状态码。基于this question,我可以让他们学习HttpClient对象-
但是,这意味着初始化HttpClient对象,并且似乎拒绝Fluent接口(interface)和Request.Get(或Post)语法。有没有一种方法既可以获取状态代码又可以获取主体,而又不会丢失Fluent语法并且不会进行两次离散调用?
有几种使用EntityUtils检索正文内容的方法。在这种情况下,我正在从缓存中检索序列化的对象,但是您明白了。我真的不相信这是与Fluent API的背离,但我想这是一个见解。问题在于,使用Fluent returnXXX方法,响应将被完全消耗并关闭,因此您必须从响应本身中获取所需的东西。
(5个答案)
2年前关闭。
我在一些示例代码中使用Apache's HttpClient Fluent Facade in Java供开发人员扩展。他们真的很喜欢流利的门面,它具有以下功能:
this.body = Request.Get(uri.build()).execute().returnContent().asString();
另外,我可以通过调用以下方式获取状态代码:
this.statusCode = Request.Get(uri.build()).execute().returnResponse().getStatusLine().getStatusCode();
不幸的是,在某些情况下,除了正文以外,我还需要状态码。基于this question,我可以让他们学习HttpClient对象-
HttpResponse response = client.execute(httpGet);
String body = handler.handleResponse(response);
int code = response.getStatusLine().getStatusCode();
但是,这意味着初始化HttpClient对象,并且似乎拒绝Fluent接口(interface)和Request.Get(或Post)语法。有没有一种方法既可以获取状态代码又可以获取主体,而又不会丢失Fluent语法并且不会进行两次离散调用?
最佳答案
是的,是的,尽管您必须自己处理Response对象。这是我过去如何做的一个例子:
org.apache.http.HttpResponse response = Request.Get(url)
.connectTimeout(CONNECTION_TIMEOUT_MILLIS)
.socketTimeout(SOCKET_TIMEOUT_MILLIS)
.execute()
.returnResponse();
int status = response.getStatusLine().getStatusCode();
byte[] serializedObject = EntityUtils.toByteArray(response.getEntity());
有几种使用EntityUtils检索正文内容的方法。在这种情况下,我正在从缓存中检索序列化的对象,但是您明白了。我真的不相信这是与Fluent API的背离,但我想这是一个见解。问题在于,使用Fluent returnXXX方法,响应将被完全消耗并关闭,因此您必须从响应本身中获取所需的东西。
10-05 22:43