public Builder setUrl(String url) { requestBuilder.setUrl(url); return this; }
public static RequestBuilder request(String method, String url) { return new RequestBuilder(method).setUrl(url); }
@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"); }
/** * Converts retrofit request to async-http-client request. * * @param request retrofit request * @return async-http-client request. */ @SneakyThrows protected org.asynchttpclient.Request createRequest(@NonNull Request request) { // create async-http-client request builder val requestBuilder = new RequestBuilder(request.method()); // request uri requestBuilder.setUrl(request.url().toString()); // set headers val headers = request.headers(); headers.names().forEach(name -> requestBuilder.setHeader(name, headers.values(name))); // set request body val body = request.body(); if (body != null && body.contentLength() > 0) { if (body.contentType() != null) { requestBuilder.setHeader(HttpHeaderNames.CONTENT_TYPE, body.contentType().toString()); } // write body to buffer val okioBuffer = new Buffer(); body.writeTo(okioBuffer); requestBuilder.setBody(okioBuffer.readByteArray()); } // customize the request builder (external customizer can change the request url for example) runConsumers(this.requestCustomizers, requestBuilder); return requestBuilder.build(); }
@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 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 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); } }
@Test public void propFindCompletionHandlerWebDavTest() 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 propFindRequest = new RequestBuilder("PROPFIND").setUrl(getTargetUrl()).build(); WebDavResponse webDavResponse = c.executeRequest(propFindRequest, new WebDavCompletionHandlerBase<WebDavResponse>() { /** * {@inheritDoc} */ @Override public void onThrowable(Throwable t) { t.printStackTrace(); } @Override public WebDavResponse onCompleted(WebDavResponse response) { return response; } }).get(); assertEquals(webDavResponse.getStatusCode(), 207); assertTrue(webDavResponse.getResponseBody().contains("HTTP/1.1 200 OK"), "Got " + response.getResponseBody()); } } }
@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()); } }
request.setUrl(url); byte[] payload; int payloadLength;
public Builder setUrl(String url) { requestBuilder.setUrl(url); return this; }
protected void baseUrl(String url) { request().setUrl(url); }
private Request req(String method, String url) { RequestBuilder builder = new RequestBuilder(method); if (realm != null) { builder.setRealm(realm); } else { builder.addHeader("Authorization", "Bearer " + oauthToken); } builder.setUrl(RESTRICTED_PATTERN.matcher(url).replaceAll("+")); // replace out %2B with + due to API restriction return builder.build(); }
private Request req(String method, Uri template, String contentType, byte[] body) { RequestBuilder builder = new RequestBuilder(method); if (realm != null) { builder.setRealm(realm); } else { builder.addHeader("Authorization", "Bearer " + oauthToken); } builder.setUrl(RESTRICTED_PATTERN.matcher(template.toString()).replaceAll("+")); //replace out %2B with + due to API restriction builder.addHeader("Content-type", contentType); builder.setBody(body); return builder.build(); }
@Override public CompletionStage<Stream<NetworkRequest>> queryPending(ConnectionRequestsQuery query) { Objects.requireNonNull(query); final String url = String.format("%s/rest/external/network/requests", endpoint); return execute(authenticated(query, new RequestBuilder(GET) .setUrl(url) .setHeader(HttpHeaders.ACCEPT, acceptMimeType))) .thenApply(r -> { if (r.getStatusCode() == 200) { return deserializer.pendingConnections(r.getResponseBodyAsStream()).getItems().stream(); } throw parseHttpStatusCode(query.getUserContext(), r); }); }
@Override public CompletionStage<AcceptedConnection> accept(AcceptConnection cmd) { Objects.requireNonNull(cmd); final ID<Connection> connectionId = cmd.getConnectionId(); final String url = String.format("%s/rest/external/network/requests/%s/accept", endpoint, connectionId); return execute(authenticated(cmd, new RequestBuilder(POST) .setUrl(url))) .thenApply(r -> { if (r.getStatusCode() == 200) { return new AcceptedConnection(cmd.getUserContext(), ID.fromString(r.getResponseBody())); } throw parseHttpStatusCode(cmd.getUserContext(), r); }); }