public Builder setHeader(CharSequence name, Object value) { requestBuilder.setHeader(name, value); return this; }
/** * Invoke this API if you want to set the Range header on your {@link Request} based on the last valid bytes * position. * * @param request {@link Request} * @return a {@link Request} with the Range header properly set. */ public Request adjustRequestRange(Request request) { Long ri = resumableIndex.get(request.getUrl()); if (ri != null) { byteTransferred.set(ri); } // The Resumable if (resumableListener != null && resumableListener.length() > 0 && byteTransferred.get() != resumableListener.length()) { byteTransferred.set(resumableListener.length()); } RequestBuilder builder = new RequestBuilder(request); if (request.getHeaders().get(RANGE) == null && byteTransferred.get() != 0) { builder.setHeader(RANGE, "bytes=" + byteTransferred.get() + "-"); } return builder.build(); }
@Test public void testContentTypeCharsetToBodyEncoding() { final Request req = get("http://localhost").setHeader("Content-Type", "application/json; charset=utf-8").build(); assertEquals(req.getCharset(), UTF_8); final Request req2 = get("http://localhost").setHeader("Content-Type", "application/json; charset=\"utf-8\"").build(); assertEquals(req2.getCharset(), UTF_8); }
/** * 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(); }
request.setHeader(HttpHeaders.Names.CONTENT_ENCODING, HttpHeaders.Values.GZIP); break; default: request.setHeader(HttpHeaders.Names.CONTENT_TYPE, "application/json"); request.setHeader(HttpHeaders.Names.CONTENT_LENGTH, String.valueOf(payloadLength)); request.setBody(ByteBuffer.wrap(payload, 0, payloadLength)); final String password = parts.length > 1 ? parts[1] : ""; String encoded = StringUtils.encodeBase64String((user + ':' + password).getBytes(StandardCharsets.UTF_8)); request.setHeader(HttpHeaders.Names.AUTHORIZATION, "Basic " + encoded);
@Test public void negativeContentTypeTest() throws Exception { AsyncHttpClientConfig config = config() .setConnectTimeout(100) .setMaxConnections(50) .setRequestTimeout(5 * 60 * 1000) // 5 minutes .build(); try (AsyncHttpClient client = asyncHttpClient(config)) { RequestBuilder requestBuilder = post(getTargetUrl()) .setHeader("Content-Type", "message/rfc822") .setBody(new InputStreamBodyGenerator(new ByteArrayInputStream(MY_MESSAGE.getBytes()))); Future<Response> future = client.executeRequest(requestBuilder.build()); System.out.println("waiting for response"); Response response = future.get(); assertEquals(response.getStatusCode(), 200); assertEquals(response.getResponseBody(), MY_MESSAGE); } } }
/** * Configure and execute the associated {@link RequestFilter}. This class * may decorate the {@link Request} and {@link AsyncHandler} * * @param fc {@link FilterContext} * @return {@link FilterContext} */ private <T> FilterContext<T> preProcessRequest(FilterContext<T> fc) throws FilterException { for (RequestFilter asyncFilter : config.getRequestFilters()) { fc = asyncFilter.filter(fc); assertNotNull(fc, "filterContext"); } Request request = fc.getRequest(); if (fc.getAsyncHandler() instanceof ResumableAsyncHandler) { request = ResumableAsyncHandler.class.cast(fc.getAsyncHandler()).adjustRequestRange(request); } if (request.getRangeOffset() != 0) { RequestBuilder builder = new RequestBuilder(request); builder.setHeader("Range", "bytes=" + request.getRangeOffset() + "-"); request = builder.build(); } fc = new FilterContext.FilterContextBuilder<>(fc).request(request).build(); return fc; }
@Test public void nonPoolableConnectionReleaseSemaphoresTest() throws Throwable { RequestBuilder request = get(getTargetUrl()).setHeader("Connection", "close"); try (AsyncHttpClient client = asyncHttpClient(config().setMaxConnections(6).setMaxConnectionsPerHost(3))) { client.executeRequest(request).get(); Thread.sleep(1000); client.executeRequest(request).get(); Thread.sleep(1000); client.executeRequest(request).get(); Thread.sleep(1000); client.executeRequest(request).get(); } }
@Test public void testDecompressBodyWithProxy() throws Exception { AsyncHttpClientConfig config = config() .setFollowRedirect(true) .setProxyServer(proxyServer("localhost", port1).build()) .setUseInsecureTrustManager(true) .build(); try (AsyncHttpClient asyncHttpClient = asyncHttpClient(config)) { String body = "hello world"; Response r = asyncHttpClient.executeRequest(post(getTargetUrl2()) .setHeader("X-COMPRESS", "true") .setBody(body)).get(); assertEquals(r.getStatusCode(), 200); assertEquals(r.getResponseBody(), body); } }
public Builder setHeader(String name, String value) { requestBuilder.setHeader(name, value); return this; }
/** * Invoke this API if you want to set the Range header on your {@link Request} based on the last valid bytes * position. * * @param request {@link Request} * @return a {@link Request} with the Range header properly set. */ public Request adjustRequestRange(Request request) { Long ri = resumableIndex.get(request.getUrl()); if (ri != null) { byteTransferred.set(ri); } // The Resumbale if (resumableListener != null && resumableListener.length() > 0 && byteTransferred.get() != resumableListener.length()) { byteTransferred.set(resumableListener.length()); } RequestBuilder builder = new RequestBuilder(request); if (request.getHeaders().get("Range").isEmpty() && byteTransferred.get() != 0) { builder.setHeader("Range", "bytes=" + byteTransferred.get() + "-"); } return builder.build(); }
@Override public CompletionStage<JsonStructure> queryAsJson(ConnectionRequestsQuery query) { Objects.requireNonNull(query); if (!MediaType.APPLICATION_JSON.equals(acceptMimeType)) { throw new UnsupportedOperationException("This method is only available with a JSON deserializer."); } 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.parseToObject(r.getResponseBodyAsStream()); } throw parseHttpStatusCode(query.getUserContext(), r); }); }
throw new RuntimeException("Unsupported method type: " + methodType); requestHeaders.forEach((name, value) -> request.setHeader(name, value)); return request.build();
throw new RuntimeException("Unsupported method type: " + methodType); requestHeaders.forEach((name, value) -> request.setHeader(name, value)); return request.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<ConnectionRequestSent> connect(ConnectionRequest cmd) { Objects.requireNonNull(cmd); final ID<Connection> connectionId = cmd.getConnectionId(); final String url = String.format("%s/rest/external/network/connections/%s", endpoint, connectionId); return execute(authenticated(cmd, new RequestBuilder(PUT) .setUrl(url) .setHeader(HttpHeaders.CONTENT_TYPE, contentMimeType) .setBody(serializer.serialize(cmd)))) .thenApply(r -> { if (r.getStatusCode() == 201) { String location = r.getHeader("Location"); String newConnectionId = location.substring(location.lastIndexOf('/') + 1, location.length()); return new ConnectionRequestSent(cmd.getUserContext(), connectionId, ID.fromString(newConnectionId)); } throw parseHttpStatusCode(cmd.getUserContext(), r); }); }
@Override public CompletionStage<com.tradeshift.sdk.network.domain.Connection> query(ConnectionQuery query) { Objects.requireNonNull(query); final ID<Connection> connectionId = query.getConnectionId(); final String url = String.format("%s/rest/external/network/connections/%s", endpoint, connectionId); return execute(authenticated(query, new RequestBuilder(GET) .setUrl(url) .setHeader(HttpHeaders.ACCEPT, acceptMimeType))) .thenApply(r -> { if (r.getStatusCode() == 200) { return deserializer.deserializeConnection(r.getResponseBodyAsStream()); } throw parseHttpStatusCode(query.getUserContext(), r); }); }
@Override public CompletionStage<Boolean> createConnectionGroup(CreateConnectionGroup req) { Objects.requireNonNull(req); final String url = String.format("%s/rest/network/groups/%s", endpoint, req.getConnectionGroupId()); return execute(authenticated(req, new RequestBuilder(PUT) .setUrl(url) .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) .setBody(serializer.serialize(req)))) .thenApply(r -> { if (r.getStatusCode() == 204) { return Boolean.TRUE; } throw parseHttpStatusCode(req.getUserContext(), r); }); } }
/** * Configure and execute the associated {@link RequestFilter}. This class may decorate the {@link Request} and {@link AsyncHandler} * * @param fc {@link FilterContext} * @return {@link FilterContext} */ private <T> FilterContext<T> preProcessRequest(FilterContext<T> fc) throws FilterException { for (RequestFilter asyncFilter : config.getRequestFilters()) { fc = asyncFilter.filter(fc); if (fc == null) { throw new NullPointerException("FilterContext is null"); } } Request request = fc.getRequest(); if (fc.getAsyncHandler() instanceof ResumableAsyncHandler) { request = ResumableAsyncHandler.class.cast(fc.getAsyncHandler()).adjustRequestRange(request); } if (request.getRangeOffset() != 0) { RequestBuilder builder = new RequestBuilder(request); builder.setHeader("Range", "bytes=" + request.getRangeOffset() + "-"); request = builder.build(); } fc = new FilterContext.FilterContextBuilder<>(fc).request(request).build(); return fc; }
@Override public CompletionStage<ExternalConnectionCreated> createExternalConnection( CreateExternalConnectionRequest cmd) { final ID<Connection> connectionId = cmd.getConnectionId(); final String url = String.format("%s/rest/external/network/connections/%s", endpoint, connectionId); return execute(authenticated(cmd, new RequestBuilder(PUT) .setUrl(url) .setHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) .setBody(serializer.serialize(cmd)))) .thenApply(r -> { if (r.getStatusCode() == 201) { return new ExternalConnectionCreated(cmd.getUserContext(), connectionId); } throw parseHttpStatusCode(cmd.getUserContext(), r); }); }