public Builder() { requestBuilder = new RequestBuilder("GET", false); }
private RequestBuilder rebuildRequest(Request rb) { return new RequestBuilder(rb); }
private Builder(SimpleAsyncHttpClient client) { this.requestBuilder = new RequestBuilder(client.requestBuilder.build()); this.defaultThrowableHandler = client.defaultThrowableHandler; this.errorDocumentBehaviour = client.errorDocumentBehaviour; this.enableResumableDownload = client.resumeEnabled; this.ahc = client.getAsyncHttpClient(); this.listener = client.listener; }
public static RequestBuilder request(String method, String url) { return new RequestBuilder(method).setUrl(url); }
@Test public void testDefaultMethod() { RequestBuilder requestBuilder = new RequestBuilder(); String defaultMethodName = HttpMethod.GET.name(); assertEquals(requestBuilder.method, defaultMethodName, "Default HTTP method should be " + defaultMethodName); }
@Test public void testSetHeaders() { RequestBuilder requestBuilder = new RequestBuilder(); assertTrue(requestBuilder.headers.isEmpty(), "Headers should be empty by default."); Map<CharSequence, Collection<?>> headers = new HashMap<>(); headers.put("Content-Type", Collections.singleton("application/json")); requestBuilder.setHeaders(headers); assertTrue(requestBuilder.headers.contains("Content-Type"), "headers set by setHeaders have not been set"); assertEquals(requestBuilder.headers.get("Content-Type"), "application/json", "header value incorrect"); }
@Test public void testSettingHeadersUsingMapWithStringKeys() { Map<String, List<String>> headers = new HashMap<>(); headers.put("X-Forwarded-For", singletonList("10.0.0.1")); RequestBuilder requestBuilder = new RequestBuilder(); requestBuilder.setHeaders(headers); requestBuilder.setUrl("http://localhost"); Request request = requestBuilder.build(); assertEquals(request.getHeaders().get("X-Forwarded-For"), "10.0.0.1"); } }
@Test public void testUserProvidedRequestMethod() { Request req = new RequestBuilder("ABC").setUrl("http://foo.com").build(); assertEquals(req.getMethod(), "ABC"); assertEquals(req.getUrl(), "http://foo.com"); }
@Test public void testSettingQueryParamsBeforeUrlShouldNotProduceNPE() { RequestBuilder requestBuilder = new RequestBuilder(); requestBuilder.setQueryParams(singletonList(new Param("key", "value"))); requestBuilder.setUrl("http://localhost"); Request request = requestBuilder.build(); assertEquals(request.getUrl(), "http://localhost?key=value"); }
public boolean exitAfterHandlingConnect(Channel channel, NettyResponseFuture<?> future, Request request, ProxyServer proxyServer) { if (future.isKeepAlive()) future.attachChannel(channel, true); Uri requestUri = request.getUri(); LOGGER.debug("Connecting to proxy {} for scheme {}", proxyServer, requestUri.getScheme()); Future<Channel> whenHandshaked = channelManager.updatePipelineForHttpTunneling(channel.pipeline(), requestUri); future.setReuseChannel(true); future.setConnectAllowed(false); Request targetRequest = new RequestBuilder(future.getTargetRequest()).build(); if (whenHandshaked == null) { requestSender.drainChannelAndExecuteNextRequest(channel, future, targetRequest); } else { requestSender.drainChannelAndExecuteNextRequest(channel, future, targetRequest, whenHandshaked); } return true; } }
@Test public void testChaining() { Request request = get("http://foo.com").addQueryParam("x", "value").build(); Request request2 = new RequestBuilder(request).build(); assertEquals(request2.getUri(), request.getUri()); }
@Test public void mkcolWebDavTest1() throws InterruptedException, IOException, ExecutionException { try (AsyncHttpClient c = asyncHttpClient()) { Request mkcolRequest = new RequestBuilder("MKCOL").setUrl(getTargetUrl()).build(); Response response = c.executeRequest(mkcolRequest).get(); assertEquals(response.getStatusCode(), 201); } }
@Test(enabled = false, description = "https://github.com/AsyncHttpClient/async-http-client/issues/1113") public void testTTLBug() throws Throwable { // The purpose of this test is to reproduce two issues: // 1) Connections that are rejected by the pool are not closed and eventually use all available sockets. // 2) It is possible for a connection to be closed while active by the timer task that checks for expired connections. try (AsyncHttpClient client = asyncHttpClient(config().setKeepAlive(true).setConnectionTtl(1).setPooledConnectionIdleTimeout(1))) { for (int i = 0; i < 200000; ++i) { Request request = new RequestBuilder().setUrl(String.format("http://localhost:%d/", port1)).build(); Future<Response> future = client.executeRequest(request); future.get(5, TimeUnit.SECONDS); // This is to give a chance to the timer task that removes expired connection // from sometimes winning over poll for the ownership of a connection. if (System.currentTimeMillis() % 100 == 0) { Thread.sleep(5); } } } } }
@Test public void basicPropFindWebDavTest() throws InterruptedException, IOException, ExecutionException { try (AsyncHttpClient c = asyncHttpClient()) { Request propFindRequest = new RequestBuilder("PROPFIND").setUrl(getTargetUrl()).build(); Response response = c.executeRequest(propFindRequest).get(); assertEquals(response.getStatusCode(), 404); } }
@Test public void mkcolWebDavTest2() throws InterruptedException, IOException, ExecutionException { try (AsyncHttpClient c = asyncHttpClient()) { Request mkcolRequest = new RequestBuilder("MKCOL").setUrl(getTargetUrl() + "/folder2").build(); Response response = c.executeRequest(mkcolRequest).get(); assertEquals(response.getStatusCode(), 409); } }
@Test public void testPercentEncodeKeyValues() { // see https://github.com/AsyncHttpClient/async-http-client/issues/1415 String keyValue = "\u3b05\u000c\u375b"; ConsumerKey consumer = new ConsumerKey(keyValue, "secret"); RequestToken reqToken = new RequestToken(keyValue, "secret"); OAuthSignatureCalculator calc = new OAuthSignatureCalculator(consumer, reqToken); RequestBuilder reqBuilder = new RequestBuilder() .setUrl("https://api.dropbox.com/1/oauth/access_token?oauth_token=%EC%AD%AE%E3%AC%82%EC%BE%B8%E7%9C%9A%E8%BD%BD%E1%94%A5%E8%AD%AF%E8%98%93%E0%B9%99%E5%9E%96%EF%92%A2%EA%BC%97%EA%90%B0%E4%8A%91%E8%97%BF%EF%A8%BB%E5%B5%B1%DA%98%E2%90%87%E2%96%96%EE%B5%B5%E7%B9%AD%E9%AD%87%E3%BE%93%E5%AF%92%EE%BC%8F%E3%A0%B2%E8%A9%AB%E1%8B%97%EC%BF%80%EA%8F%AE%ED%87%B0%E5%97%B7%E9%97%BF%E8%BF%87%E6%81%A3%E5%BB%A1%EC%86%92%E8%92%81%E2%B9%94%EB%B6%86%E9%AE%8A%E6%94%B0%EE%AC%B5%E6%A0%99%EB%8B%AD%EB%BA%81%E7%89%9F%E5%B3%B7%EA%9D%B7%EC%A4%9C%E0%BC%BA%EB%BB%B9%ED%84%A9%E8%A5%B9%E8%AF%A0%E3%AC%85%0C%E3%9D%9B%E8%B9%8B%E6%BF%8C%EB%91%98%E7%8B%B3%E7%BB%A8%E2%A7%BB%E6%A3%84%E1%AB%B2%E8%8D%93%E4%BF%98%E9%B9%B9%EF%9A%8B%E8%A5%93"); Request req = reqBuilder.build(); calc.calculateAndAddSignature(req, reqBuilder); } }
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; } };
@Test public void propFindWebDavTest() throws InterruptedException, IOException, ExecutionException { try (AsyncHttpClient c = asyncHttpClient()) { Request mkcolRequest = new RequestBuilder("MKCOL").setUrl(getTargetUrl()).build(); Response response = c.executeRequest(mkcolRequest).get(); assertEquals(response.getStatusCode(), 201); Request putRequest = put(getTargetUrl() + "/Test.txt").setBody("this is a test").build(); response = c.executeRequest(putRequest).get(); assertEquals(response.getStatusCode(), 201); Request propFindRequest = new RequestBuilder("PROPFIND").setUrl(getTargetUrl() + "/Test.txt").build(); response = c.executeRequest(propFindRequest).get(); assertEquals(response.getStatusCode(), 207); assertTrue(response.getResponseBody().contains("HTTP/1.1 200 OK"), "Got " + response.getResponseBody()); } }
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; } };
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; } };