读取响应

编辑

同步 performRequest 方法返回的 Response 对象,或作为 ResponseListener#onSuccess(Response) 中的参数接收到的 Response 对象,封装了 http 客户端返回的响应对象,并公开了一些附加信息。

Response response = restClient.performRequest(new Request("GET", "/"));
RequestLine requestLine = response.getRequestLine(); 
HttpHost host = response.getHost(); 
int statusCode = response.getStatusLine().getStatusCode(); 
Header[] headers = response.getHeaders(); 
String responseBody = EntityUtils.toString(response.getEntity()); 

有关已执行请求的信息

返回响应的主机

响应状态行,例如,您可以从中检索状态代码

响应头,也可以通过 getHeader(String) 按名称检索

包含在 org.apache.http.HttpEntity 对象中的响应体

执行请求时,会在以下情况下抛出异常(或作为 ResponseListener#onFailure(Exception) 中的参数接收):

IOException
通信问题(例如 SocketTimeoutException)
ResponseException
返回了响应,但其状态代码指示错误(不是 2xx)。ResponseException 源于有效的 http 响应,因此它公开了相应的 Response 对象,该对象可以访问返回的响应。

对于返回 404 状态代码的 HEAD 请求,不会抛出 ResponseException,因为这是一个预期的 HEAD 响应,它只是表示未找到资源。所有其他 HTTP 方法(例如,GET)都会对 404 响应抛出 ResponseException,除非 ignore 参数包含 404ignore 是一个特殊的客户端参数,不会发送到 Elasticsearch,它包含一个以逗号分隔的错误状态代码列表。它允许控制是否应将某些错误状态代码视为预期响应而不是异常。例如,这对于 get api 非常有用,因为它在文档丢失时可能会返回 404,在这种情况下,响应体不会包含错误,而是包含通常的 get api 响应,只是因为找不到文档而没有文档。

请注意,低级别客户端不提供任何用于 json 编组和反编组的帮助程序。用户可以自由使用他们喜欢的库来实现此目的。

底层的 Apache Async Http Client 附带不同的 org.apache.http.HttpEntity 实现,允许以不同的格式(流、字节数组、字符串等)提供请求体。至于读取响应体,HttpEntity#getContent 方法非常方便,它返回一个从先前缓冲的响应体读取的 InputStream。或者,可以提供自定义的 org.apache.http.nio.protocol.HttpAsyncResponseConsumer 来控制如何读取和缓冲字节。