如何与Apache的HTTP异步客户端异步使用http响应内容?

时间:2016-06-24 20:33:28

标签: java apache-httpasyncclient

我是Java NIO的新手。我正在使用它来发出HTTP Get请求。请求正确执行,但我无法弄清楚如何获取响应的内容。

例如,

CloseableHttpAsyncClient httpClient = HttpAsyncClients.createDefault();
httpClient.start();
url = buildUrl(); //builds the url for the GET request
BasicAsyncResponseConsumer consumer = new BasicAsyncResponseConsumer();
 Future<HttpResponse> future = httpClient.execute(HttpAsyncMethods.createGet(url), consumer, null)

现在我如何获得回复的内容?在打印未来时,我得到以下内容:

HTTP/1.1 200 OK [Content-Type: application/json, Date: Fri, 24 Jun 2016 20:21:47 GMT, Content-Length: 903, Connection: keep-alive] [Content-Length: 903,Chunked: false]

我的回复(在浏览器上)是903个字符,所以我知道它正确地提出了请求。但是,如何打印出结果的json内容?

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这个问题。

一,在get()返回的Future上致电execute,阻止直到结果准备就绪。结果准备就绪后,get()将返回HttpResponse对象,您可以使用该对象检索getEntity内容。 HttpEntity有一个InputStream。如果您认为合适,请阅读它。

两个,提供比HttpAsyncResponseConsumer更智能的BasicAsyncResponseConsumer实现,它会读取(并关闭)HttpResponse&#39; HttpEntity并生成可以消费的值通过FutureCallback值预期作为HttpAsyncClient#execute的第三个参数。此解决方案不会阻止您当前的线程。