@Test public void replayStatusCodeResponseFilterTest() throws Exception { final AtomicBoolean replay = new AtomicBoolean(true); ResponseFilter responseFilter = new ResponseFilter() { public <T> FilterContext<T> filter(FilterContext<T> ctx) { if (ctx.getResponseStatus() != null && ctx.getResponseStatus().getStatusCode() == 200 && replay.getAndSet(false)) { Request request = new RequestBuilder(ctx.getRequest()).addHeader("X-Replay", "true").build(); return new FilterContext.FilterContextBuilder<T>().asyncHandler(ctx.getAsyncHandler()).request(request).replayRequest(true).build(); } return ctx; } }; try (AsyncHttpClient c = asyncHttpClient(config().addResponseFilter(responseFilter))) { Response response = c.preparePost(getTargetUrl()).execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); assertEquals(response.getHeader("X-Replay"), "true"); } }
@Test public void replayResponseFilterTest() throws Exception { final AtomicBoolean replay = new AtomicBoolean(true); ResponseFilter responseFilter = new ResponseFilter() { public <T> FilterContext<T> filter(FilterContext<T> ctx) { if (replay.getAndSet(false)) { Request request = new RequestBuilder(ctx.getRequest()).addHeader("X-Replay", "true").build(); return new FilterContext.FilterContextBuilder<T>().asyncHandler(ctx.getAsyncHandler()).request(request).replayRequest(true).build(); } return ctx; } }; try (AsyncHttpClient c = asyncHttpClient(config().addResponseFilter(responseFilter))) { Response response = c.preparePost(getTargetUrl()).execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); assertEquals(response.getHeader("X-Replay"), "true"); } }
@Test public void replayHeaderResponseFilterTest() throws Exception { final AtomicBoolean replay = new AtomicBoolean(true); ResponseFilter responseFilter = new ResponseFilter() { public <T> FilterContext<T> filter(FilterContext<T> ctx) { if (ctx.getResponseHeaders() != null && ctx.getResponseHeaders().get("Ping").equals("Pong") && replay.getAndSet(false)) { Request request = new RequestBuilder(ctx.getRequest()).addHeader("Ping", "Pong").build(); return new FilterContext.FilterContextBuilder<T>().asyncHandler(ctx.getAsyncHandler()).request(request).replayRequest(true).build(); } return ctx; } }; try (AsyncHttpClient c = asyncHttpClient(config().addResponseFilter(responseFilter))) { Response response = c.preparePost(getTargetUrl()).addHeader("Ping", "Pong").execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); assertEquals(response.getHeader("Ping"), "Pong"); } }
private AsyncRequestClient(Builder builder) { this.baseUri = URI.create(builder.baseUri); DefaultAsyncHttpClientConfig.Builder clientConfigBuilder = builder.clientConfigBuilder; clientConfigBuilder.addResponseFilter(new RequestRetryFilter(builder.maxRetries, Optional.fromNullable(builder.retryPredicate))); if (Optional.fromNullable(builder.proxyServer).isPresent()) { proxyServer = Optional.fromNullable(builder.proxyServer); clientConfigBuilder.setProxyServer(proxyServer.get()); clientConfigBuilder.setRealm(proxyServer.get().getRealm()); } else { proxyServer = Optional.absent(); } this.clientConfig = clientConfigBuilder.build(); this.client = new DefaultAsyncHttpClient(clientConfig); }
private void doTestPositive(final int status) throws Exception { ResponseFilter responseFilter = new ResponseFilter() { @Override public <T> FilterContext<T> filter(FilterContext<T> ctx) { // pass on the x-expect-get and remove the x-redirect // headers if found in the response ctx.getResponseHeaders().get("x-expect-get"); ctx.getRequest().getHeaders().add("x-expect-get", "true"); ctx.getRequest().getHeaders().remove("x-redirect"); return ctx; } }; try (AsyncHttpClient p = asyncHttpClient(config().setFollowRedirect(true).addResponseFilter(responseFilter))) { Request request = post(getTargetUrl()).addFormParam("q", "a b").addHeader("x-redirect", +status + "@" + "http://localhost:" + port1 + "/foo/bar/baz").build(); Future<Integer> responseFuture = p.executeRequest(request, new AsyncCompletionHandler<Integer>() { @Override public Integer onCompleted(Response response) { return response.getStatusCode(); } @Override public void onThrowable(Throwable t) { t.printStackTrace(); fail("Unexpected exception: " + t.getMessage(), t); } }); int statusCode = responseFuture.get(); assertEquals(statusCode, 200); } }
private void doTestNegative(final int status, boolean strict) throws Exception { ResponseFilter responseFilter = new ResponseFilter() { @Override public <T> FilterContext<T> filter(FilterContext<T> ctx) { // pass on the x-expect-get and remove the x-redirect // headers if found in the response ctx.getResponseHeaders().get("x-expect-post"); ctx.getRequest().getHeaders().add("x-expect-post", "true"); ctx.getRequest().getHeaders().remove("x-redirect"); return ctx; } }; try (AsyncHttpClient p = asyncHttpClient(config().setFollowRedirect(true).setStrict302Handling(strict).addResponseFilter(responseFilter))) { Request request = post(getTargetUrl()).addFormParam("q", "a b").addHeader("x-redirect", +status + "@" + "http://localhost:" + port1 + "/foo/bar/baz").addHeader("x-negative", "true").build(); Future<Integer> responseFuture = p.executeRequest(request, new AsyncCompletionHandler<Integer>() { @Override public Integer onCompleted(Response response) { return response.getStatusCode(); } @Override public void onThrowable(Throwable t) { t.printStackTrace(); fail("Unexpected exception: " + t.getMessage(), t); } }); int statusCode = responseFuture.get(); assertEquals(statusCode, 200); } }
@Test public void basicResponseFilterTest() throws Exception { ResponseFilter responseFilter = new ResponseFilter() { @Override public <T> FilterContext<T> filter(FilterContext<T> ctx) { return ctx; } }; try (AsyncHttpClient c = asyncHttpClient(config().addResponseFilter(responseFilter))) { Response response = c.preparePost(getTargetUrl()).execute().get(); assertNotNull(response); assertEquals(response.getStatusCode(), 200); } }