我正在使用HttpAsyncClient
来GET
一些网址。在某些情况下,让我们说当我收到状态HTTP-304
时,我想放弃正在进行的通话。我不想等待身体,我不想花机器资源。有没有办法取消这个?显然,futureResponse.cancel(true)
或futureResponse.finalize()
之类的内容无效。
Future<Response> futureResponse = httpClient.prepareGet("some-url").addHeader("some", "header").execute(new AsyncCompletionHandler<Response>() {
@Override
public State onStatusReceived(HttpResponseStatus status) throws Exception {
logger.info("status {}", status);
// CONDITIONAL FINISH THIS CALL
return super.onStatusReceived(status);
}
@Override
public Response onCompleted(Response response) throws Exception {
logger.info("its ok");
return response;
}
@Override
public void onThrowable(Throwable t) {
logger.error(t);
}
});
答案 0 :(得分:1)
来自doc:
您可以返回ABORT以关闭连接。
@Override
public State onStatusReceived(HttpResponseStatus responseStatus) throws Exception {
Integer status = responseStatus.getStatusCode();
if (304 == status) { // CONDITIONAL FINISH THIS CALL
return State.ABORT;
} else {
doSomething()
return ...
}
}