gpt4 book ai didi

java - Apache 或其他一些 CLIENT JAVA 实现是否支持 HTTP/2?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:17 27 4
gpt4 key购买 nike

我正在寻找可以连接到基于 HTTP/2 的服务器的 Java 客户端。该服务器已经支持 HTTP/2 API。我没有看到最流行的 Apache Http 客户端 https://hc.apache.org/仍然支持 HTTP/2。

Apache 是否已经有一些支持 Http/2 的 Java 客户端实现?

如果没有,是否有一些 Java 客户端支持连接到 HTTP/2,最好是在 Java 7 上?

最佳答案

Jetty的提供了两个 HTTP/2 Java 客户端 API。两者都需要 Java 8(或更好)和强制使用 ALPN,如解释的那样 here .

低级 API

这些 API 基于 HTTP2Client ,它基于 sessionstreams 的 HTTP/2 概念,并使用监听器来通知从服务器。

    // Setup and start the HTTP2Client.
HTTP2Client client = new HTTP2Client();
SslContextFactory sslContextFactory = new SslContextFactory();
client.addBean(sslContextFactory);
client.start();

// Connect to the remote host to obtains a Session.
FuturePromise<Session> sessionPromise = new FuturePromise<>();
client.connect(sslContextFactory, new InetSocketAddress(host, port), new ServerSessionListener.Adapter(), sessionPromise);
Session session = sessionPromise.get(5, TimeUnit.SECONDS);

// Use the session to make requests.
HttpFields requestFields = new HttpFields();
requestFields.put("User-Agent", client.getClass().getName() + "/" + Jetty.VERSION);
MetaData.Request metaData = new MetaData.Request("GET", new HttpURI("https://webtide.com/"), HttpVersion.HTTP_2, requestFields);
HeadersFrame headersFrame = new HeadersFrame(metaData, null, true);
session.newStream(headersFrame, new Promise.Adapter<>(), new Stream.Listener.Adapter()
{
@Override
public void onHeaders(Stream stream, HeadersFrame frame)
{
// Response headers.
System.err.println(frame);
}

@Override
public void onData(Stream stream, DataFrame frame, Callback callback)
{
// Response content.
System.err.println(frame);
callback.succeeded();
}
});

高级 API

Jetty的HttpClient提供了一种使用different transports的方法,其中之一是 HTTP/2 transport .应用程序将使用更高级别的 HTTP API,但在 Jetty 下将使用 HTTP/2 来传输 HTTP 语义。

通过这种方式,应用程序可以透明地使用 HttpClient 提供的高级 API,并在配置或启动代码中找出要使用的传输方式。

    // 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/");

关于java - Apache 或其他一些 CLIENT JAVA 实现是否支持 HTTP/2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34823433/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com