@Test public void testClientSynchronousConnectFailures() { System.setProperty("vertx.disableDnsResolver", "true"); Vertx vertx = Vertx.vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().setQueryTimeout(100))); try { int poolSize = 2; HttpClient client = vertx.createHttpClient(new HttpClientOptions().setMaxPoolSize(poolSize)); AtomicInteger failures = new AtomicInteger(); vertx.runOnContext(v -> { for (int i = 0; i < (poolSize + 1); i++) { AtomicBoolean f = new AtomicBoolean(); client.getAbs("http://invalid-host-name.foo.bar", onFailure(resp -> { if (f.compareAndSet(false, true)) { if (failures.incrementAndGet() == poolSize + 1) { testComplete(); } } })).end(); } }); await(); } finally { vertx.close(); System.setProperty("vertx.disableDnsResolver", "false"); } }
private void proxyTest(int error, String username, String url, Handler<AsyncResult<HttpClientResponse>> assertResponse) throws Exception { startProxy(error, username); final HttpClientOptions options = new HttpClientOptions() .setSsl(url.startsWith("https")) .setProxyOptions(new ProxyOptions() .setType(ProxyType.HTTP) .setHost("localhost") .setPort(proxy.getPort())); HttpClient client = vertx.createHttpClient(options); client.getAbs(url, assertResponse).end(); await(); }
HttpClientRequest clientRequest = client.getAbs(uri, ar -> { if (ar.succeeded()) { HttpClientResponse resp = ar.result();
Future<HttpClientRequest> fut = Future.future(); vertx.setTimer(25, id -> { HttpClientRequest req = client.getAbs(scheme + "://localhost:" + port + "/custom"); req.putHeader("foo", "foo_another"); req.setHost("localhost:" + port);
@Test public void testHttpProxyFtpRequest() throws Exception { startProxy(null, ProxyType.HTTP); client.close(); client = vertx.createHttpClient(new HttpClientOptions() .setProxyOptions(new ProxyOptions().setType(ProxyType.HTTP).setHost("localhost").setPort(proxy.getPort()))); final String url = "ftp://ftp.gnu.org/gnu/"; proxy.setForceUri("http://localhost:8080/"); server.requestHandler(req -> { req.response().end(); }); server.listen(onSuccess(s -> { HttpClientRequest clientReq = client.getAbs(url, onSuccess(resp -> { assertEquals(200, resp.statusCode()); assertEquals("request did sent the expected url", url, proxy.getLastUri()); testComplete(); })); clientReq.exceptionHandler(this::fail); clientReq.end(); })); await(); }
@Test public void testClientSynchronousConnectFailures() { System.setProperty("vertx.disableDnsResolver", "true"); Vertx vertx = Vertx.vertx(new VertxOptions().setAddressResolverOptions(new AddressResolverOptions().setQueryTimeout(100))); try { int poolSize = 2; HttpClient client = vertx.createHttpClient(new HttpClientOptions().setMaxPoolSize(poolSize)); AtomicInteger failures = new AtomicInteger(); vertx.runOnContext(v -> { for (int i = 0; i < (poolSize + 1); i++) { HttpClientRequest clientRequest = client.getAbs("http://invalid-host-name.foo.bar", resp -> fail()); AtomicBoolean f = new AtomicBoolean(); clientRequest.exceptionHandler(e -> { if (f.compareAndSet(false, true)) { if (failures.incrementAndGet() == poolSize + 1) { testComplete(); } } }); clientRequest.end(); } }); await(); } finally { vertx.close(); System.setProperty("vertx.disableDnsResolver", "false"); } }
/** * Create an HTTP GET request to send to the server using an absolute URI * @param absoluteURI the absolute URI * @return an HTTP client request object */ public io.vertx.rxjava.core.http.HttpClientRequest getAbs(String absoluteURI) { io.vertx.rxjava.core.http.HttpClientRequest ret = io.vertx.rxjava.core.http.HttpClientRequest.newInstance(delegate.getAbs(absoluteURI)); return ret; }
HttpClientRequest clientRequest = client.getAbs(uri, resp -> { for (String name : resp.headers().names()) { request.response().putHeader(name, resp.headers().getAll(name));
/** * Create an HTTP GET request to send to the server using an absolute URI * @param absoluteURI the absolute URI * @return an HTTP client request object */ public io.vertx.rxjava.core.http.HttpClientRequest getAbs(String absoluteURI) { io.vertx.rxjava.core.http.HttpClientRequest ret = io.vertx.rxjava.core.http.HttpClientRequest.newInstance(delegate.getAbs(absoluteURI)); return ret; }
Future<HttpClientRequest> fut = Future.future(); vertx.setTimer(25, id -> { HttpClientRequest req = client.getAbs(scheme + "://localhost:" + port + "/custom"); req.putHeader("foo", "foo_another"); req.setHost("localhost:" + port);
/** * Create an HTTP GET request to send to the server using an absolute URI, specifying a response handler to receive * the response * @param absoluteURI the absolute URI * @param responseHandler the response handler * @return an HTTP client request object */ @Deprecated() public io.vertx.rxjava.core.http.HttpClientRequest getAbs(String absoluteURI, Handler<io.vertx.rxjava.core.http.HttpClientResponse> responseHandler) { io.vertx.rxjava.core.http.HttpClientRequest ret = io.vertx.rxjava.core.http.HttpClientRequest.newInstance(delegate.getAbs(absoluteURI, new Handler<io.vertx.core.http.HttpClientResponse>() { public void handle(io.vertx.core.http.HttpClientResponse event) { responseHandler.handle(io.vertx.rxjava.core.http.HttpClientResponse.newInstance(event)); } })); return ret; }
/** * Create an HTTP GET request to send to the server using an absolute URI, specifying a response handler to receive * the response * @param absoluteURI the absolute URI * @param responseHandler the response handler * @return an HTTP client request object */ public io.vertx.rxjava.core.http.HttpClientRequest getAbs(String absoluteURI, Handler<AsyncResult<io.vertx.rxjava.core.http.HttpClientResponse>> responseHandler) { io.vertx.rxjava.core.http.HttpClientRequest ret = io.vertx.rxjava.core.http.HttpClientRequest.newInstance(delegate.getAbs(absoluteURI, new Handler<AsyncResult<io.vertx.core.http.HttpClientResponse>>() { public void handle(AsyncResult<io.vertx.core.http.HttpClientResponse> ar) { if (ar.succeeded()) { responseHandler.handle(io.vertx.core.Future.succeededFuture(io.vertx.rxjava.core.http.HttpClientResponse.newInstance(ar.result()))); } else { responseHandler.handle(io.vertx.core.Future.failedFuture(ar.cause())); } } })); return ret; }
@Test public void testHttpProxyFtpRequest() throws Exception { startProxy(null, ProxyType.HTTP); client.close(); client = vertx.createHttpClient(new HttpClientOptions() .setProxyOptions(new ProxyOptions().setType(ProxyType.HTTP).setHost("localhost").setPort(proxy.getPort()))); final String url = "ftp://ftp.gnu.org/gnu/"; proxy.setForceUri("http://localhost:8080/"); HttpClientRequest clientReq = client.getAbs(url); server.requestHandler(req -> { req.response().end(); }); server.listen(onSuccess(s -> { clientReq.handler(resp -> { assertEquals(200, resp.statusCode()); assertEquals("request did sent the expected url", url, proxy.getLastUri()); testComplete(); }); clientReq.exceptionHandler(this::fail); clientReq.end(); })); await(); }
private void proxyTest(int error, String username, String url, Handler<HttpClientResponse> assertResponse, boolean completeOnException) throws Exception { startProxy(error, username); final HttpClientOptions options = new HttpClientOptions() .setSsl(url.startsWith("https")) .setProxyOptions(new ProxyOptions() .setType(ProxyType.HTTP) .setHost("localhost") .setPort(proxy.getPort())); HttpClient client = vertx.createHttpClient(options); client.getAbs(url, assertResponse) .exceptionHandler(e -> { if (completeOnException) { testComplete(); } else { fail(e); } }) .end(); await(); }
@Override public void authenticate(JsonObject credentials, Handler<AsyncResult<User>> resultHandler) { String token = credentials.getString("token"); httpClient.getAbs("https://graph.facebook.com:443/v2.4/me?access_token=" + token) .handler(response -> response.bodyHandler(buffer -> { JsonObject json = new JsonObject(buffer.toString()); if (response.statusCode() != 200) { String message = json.getJsonObject("error").getString("message"); resultHandler.handle(Future.failedFuture(message)); } else { resultHandler.handle(Future.succeededFuture( new MyUser(Long.parseLong(json.getString("id")), json.getString("name"), token))); } })) .exceptionHandler(error -> resultHandler.handle(Future.failedFuture(error.getMessage()))) .end(); }
private void getContainerLog(Handler<AsyncResult<Void>> future) { final String url = dockerUrl + "/containers/" + containerId + "/logs?stderr=1&stdout=1&follow=1"; HttpClientRequest req = client.getAbs(url, res -> { if (res.statusCode() == 200) { // stream OK. Continue other work but keep fetching! // remove 8 bytes of binary data and final newline res.handler(this::logHandler); future.handle(Future.succeededFuture()); } else { String m = "getContainerLog HTTP error " + Integer.toString(res.statusCode()); logger.error(m); future.handle(Future.failedFuture(m)); } }); req.exceptionHandler(d -> future.handle(Future.failedFuture(d.getCause()))); req.end(); }
private void getUrl(String url, Handler<AsyncResult<JsonObject>> future) { HttpClientRequest req = client.getAbs(url, res -> { Buffer body = Buffer.buffer(); res.exceptionHandler(d -> { logger.warn(url + ": " + d.getMessage()); future.handle(Future.failedFuture(url + ": " + d.getMessage())); }); res.handler(body::appendBuffer); res.endHandler(d -> { if (res.statusCode() == 200) { JsonObject b = body.toJsonObject(); logger.info(b.encodePrettily()); future.handle(Future.succeededFuture(b)); } else { String m = url + " HTTP error " + Integer.toString(res.statusCode()) + "\n" + body.toString(); logger.error(m); future.handle(Future.failedFuture(m)); } }); }); req.exceptionHandler(d -> { logger.warn(url + ": " + d.getMessage()); future.handle(Future.failedFuture(url + ": " + d.getMessage())); }); req.end(); }
private void getList(String urlBase, Handler<ExtendedAsyncResult<ModuleDescriptor[]>> fut) { String url = urlBase; if (!url.endsWith("/")) { url += "/"; } url += "_/proxy/modules"; final Buffer body = Buffer.buffer(); HttpClientRequest req = httpClient.getAbs(url, res -> { res.handler(body::appendBuffer); res.endHandler(x -> { if (res.statusCode() != 200) { fut.handle(new Failure<>(ErrorType.USER, body.toString())); } else { ModuleDescriptor[] ml = Json.decodeValue(body.toString(), ModuleDescriptor[].class); fut.handle(new Success<>(ml)); } }); res.exceptionHandler(x -> fut.handle(new Failure<>(ErrorType.INTERNAL, x.getMessage()))); }); req.exceptionHandler(x -> fut.handle(new Failure<>(ErrorType.INTERNAL, x.getMessage()))); req.end(); }
public void hello(RoutingContext routingContext) { httpClient.getAbs("https://localhost:8090/cars") .putHeader("Accept", "application/json") .putHeader("Authorization", "Bearer " + routingContext.user().principal().getString("token")) .handler(response -> response.bodyHandler(buffer -> { if (response.statusCode() == 200) { List<Car> cars = new ArrayList<>(asList(Json.decodeValue(buffer.toString(), Car[].class))); routingContext.response() .putHeader("content-type", "test/plain") .setChunked(true) .write(cars.stream().map(Car::getName).collect(toList()).toString()) .write(", and then Hello World from Vert.x-Web!") .end(); } else { routingContext.response() .setStatusCode(response.statusCode()) .putHeader("content-type", "test/plain") .setChunked(true) .write("Oops, something went wrong: " + response.statusMessage()) .end(); } })) .end(); } }
fut.handle(new Success<>(hd)); } else { HttpClientRequest req = httpClient.getAbs(url, res -> { res.endHandler(res1 -> { hd.setHealthMessage("OK");