11
votes

Apache ou un autre client Java impliquent la mise en œuvre HTTP / 2?

Je recherche un client Java qui peut se connecter à un serveur basé sur http / 2. Le serveur prend déjà en charge l'API HTTP / 2. Je ne vois pas le client HTTP Apache https://hc.apache.org/ supportant toujours HTTP / 2.

Apache a déjà une implémentation pour le client Java qui prend en charge HTTP / 2?

Sinon, existe-t-il du client Java qui prend en charge la connexion à http / 2 de préférence sur Java 7?


0 commentaires

4 Réponses :


2
votes

Jetty a la prise en charge de http2 à partir de la version 9.3. Ceci inclut le serveur et le client .


0 commentaires


8
votes

jetty 's fournit deux API client HTTP / 2 Java. Les deux nécessitent Java 8 (ou mieux) et l'utilisation obligatoire de l'ALPN, comme expliqué Ici .

API de faible niveau h2>

Ces API sont basées sur http2Client , il est basé sur les concepts http / 2 de session em> et les flux em> et utilise des auditeurs à notifier des cadres http / 2 em> qui arrivent du serveur. P>

    // Setup and start HttpClient with HTTP/2 transport.
    HTTP2Client http2Client = new HTTP2Client();
    SslContextFactory sslContextFactory = new SslContextFactory();
    HttpClient httpClient = new HttpClient(new HttpClientTransportOverHTTP2(http2Client), sslContextFactory);
    httpClient.start();

    // Make a request.
    ContentResponse response = httpClient.GET("https://webtide.com/");


3 commentaires

Il n'y a pas de signalement d'erreur pour l'API de la jetée ... Il suffit de se bloquer ... même l'exemple que vous avez fourni au-dessus de Hors (API de haut niveau)


J'ai oublié de mentionner l'exigence d'ALPN. J'ai mis à jour la réponse avec un lien vers la section Documentation ALPN.


Je suis enfin allé avec Netty car il n'y a pas de soutien ALPN nécessaire pour cela



0
votes

Apache httpClient-5 Beta prend en charge HTTP / 2 à partir de JDK9 ou supérieure à

Exemple: P>

public static void main(final String[] args) throws Exception {
    final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(new TrustAllStrategy()).build();
    final PoolingAsyncClientConnectionManager connectionManager = PoolingAsyncClientConnectionManagerBuilder.create().setTlsStrategy(new H2TlsStrategy(sslContext, NoopHostnameVerifier.INSTANCE)).build();
    final IOReactorConfig ioReactorConfig = IOReactorConfig.custom().setSoTimeout(Timeout.ofSeconds(5)).build();
    final MinimalHttpAsyncClient client = HttpAsyncClients.createMinimal(HttpVersionPolicy.FORCE_HTTP_2, H2Config.DEFAULT, null, ioReactorConfig, connectionManager);

    client.start();
    final HttpHost target = new HttpHost("localhost", 8082, "https");
    final Future<AsyncClientEndpoint> leaseFuture = client.lease(target, null);
    final AsyncClientEndpoint endpoint = leaseFuture.get(10, TimeUnit.SECONDS);
    try {
        String[] requestUris = new String[] {"/"};
        CountDownLatch latch = new CountDownLatch(requestUris.length);
        for (final String requestUri: requestUris) {
            SimpleHttpRequest request = SimpleHttpRequest.get(target, requestUri);
            endpoint.execute(SimpleRequestProducer.create(request), SimpleResponseConsumer.create(), new FutureCallback<SimpleHttpResponse>() {
                    @Override
                    public void completed(final SimpleHttpResponse response) {
                        latch.countDown();
                        System.out.println(requestUri + "->" + response.getCode());
                        System.out.println(response.getBody());
                    }

                    @Override
                    public void failed(final Exception ex) {
                        latch.countDown();
                        System.out.println(requestUri + "->" + ex);
                        ex.printStackTrace();
                    }

                    @Override
                    public void cancelled() {
                        latch.countDown();
                        System.out.println(requestUri + " cancelled");
                    }

                });
        }
        latch.await();
    } catch (Exception e) {
        e.printStackTrace();
    }finally {
        endpoint.releaseAndReuse();
    }

    client.shutdown(ShutdownType.GRACEFUL);
}


0 commentaires