Java 9 HTTP 2.0 API入門と実践
6300 ワード
簡単に述べる
Java言語を使ってHTTPリソースを要求すると、様々な解決策があるかもしれません。最終的には合理的な方法でこの目的を達成するかもしれません。良いニュース、良いニュース、黄鶴はおばさんを連れて帰ってきて、皮革の工場は救いました:Java 9はモジュール化の特性がある以外、また全く新しいHTTPクライアントAPIを付け加えました。HTTP 2.0だけでなく、親和性のあるAPIも提供しています。SOさん、おばさんの神秘的なレースのベールをはがしましょう。
HTTP 2.0は何ですか?
HTTP 2.0は身振り手振りの新しい特性を持ってきました。バイナリサブフレーム 要求/応答パイプライン化 非同期接続 多重化 サーバプッシュフロー TCPに基づく長い接続 ヘッダ圧縮 http/2の最大の特徴は多重化を使用して、同じドメインのサーバに対しては一回のTCP接続だけを確立し、複数のリソースをロードし、バイナリフレームを使って転送し、httpヘッダを圧縮することです。このように、ふくよかなHTTP 2.0を見ました。
インキュベータモジュール
ここで注意したいのは、Java 9におけるHTTPクライアントの構築は、Incubatorモジュール、and moreに依存する必要があることである。はJDK 9にあります。このモジュールはjdk.incubator.httpclient といいます。 incubatorモジュールはJDK 10でjava.httpclientに取って代わられます。 JDK 10はこの方面で重大な突破を迎えます。
Java 9のHTTPクライアントAPI
基本的に、HTTPで通信すると、HttpRequestを送信したり、HttpResonseを受信したりするための3つのクラスに関連します。このAPIはまだ分かりやすいです。right?Let’s see:基本例:GET要求、文字列を返します。
HttpRequest.Buider
HttpRequest.newBuiderを呼び出して、最初の例のようにHttpRequest.Buiderの例を取得することができます。これを使用して、特定の要求に関連するすべてのコンテンツを構成します。以下はソースコードです。
Http Client.Buider
HttpRequestと同様に、Http Clint.newBurderを呼び出してHttp Client.Buiderの例を取得します。それはAPIを提供して、私たちの接続に関するより一般的なものを構成します。以下はソースコードです。
より多くのJava 9 HTTPクライアントアプリケーションの例
このような明るい未来のAPIを上記で見ました。その応用例についてもっと見てみましょう。
1.GET要求をファイルに保存する
POSTでローカルファイルをアップロードするのも簡単になりました。HttpRequest.BodyProcessorを使います。
非同期HTTP要求も簡単になり、HttpClient_Async()によってHttp Cliennt_茏sendの代わりになります。サービスがサポートされれば、実行中の要求をキャンセルすることもできます。
上記の例は、Java 9の標準APIを使用してHTTP要求を送信するのがより簡単であることを示している。さらに、応答を優雅に処理することができます。もちろん、いくつかの3つのパッケージのような喜びの機能がありますが、一般的には、クリーンなオープンボックスを選択する必要があります。英語のテキスト
Java言語を使ってHTTPリソースを要求すると、様々な解決策があるかもしれません。最終的には合理的な方法でこの目的を達成するかもしれません。良いニュース、良いニュース、黄鶴はおばさんを連れて帰ってきて、皮革の工場は救いました:Java 9はモジュール化の特性がある以外、また全く新しいHTTPクライアントAPIを付け加えました。HTTP 2.0だけでなく、親和性のあるAPIも提供しています。SOさん、おばさんの神秘的なレースのベールをはがしましょう。
HTTP 2.0は何ですか?
HTTP 2.0は身振り手振りの新しい特性を持ってきました。
インキュベータモジュール
ここで注意したいのは、Java 9におけるHTTPクライアントの構築は、Incubatorモジュール、and moreに依存する必要があることである。
Java 9のHTTPクライアントAPI
基本的に、HTTPで通信すると、HttpRequestを送信したり、HttpResonseを受信したりするための3つのクラスに関連します。このAPIはまだ分かりやすいです。right?Let’s see:基本例:GET要求、文字列を返します。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://labs.consol.de/"))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandler.asString());
System.out.println(response.statusCode());
System.out.println(response.body());
優雅ですよね?InputStreamとReaderが関与しておらず、−転送はBodyHandlerによって直接応答から文字列を取得する。以下、BodyHandlersを紹介する。HttpClient、HttpRequest、そしてHttpResonseはHTTP 2.0通信の主要参加者ですが、やはりBuiderと協力して使用します。Buiderは分かりやすいAPIのセットを提供します。HttpRequest.Buider
HttpRequest.newBuiderを呼び出して、最初の例のようにHttpRequest.Buiderの例を取得することができます。これを使用して、特定の要求に関連するすべてのコンテンツを構成します。以下はソースコードです。
// HttpRequest.Builder
public abstract static class Builder {
// note: some methods left out for the sake of brevity
public abstract Builder uri(URI uri);
public abstract Builder version(HttpClient.Version version);
public abstract Builder header(String name, String value);
public abstract Builder timeout(Duration duration);
public abstract Builder GET();
public abstract Builder POST(BodyProcessor body);
public abstract Builder PUT(BodyProcessor body);
public abstract Builder DELETE(BodyProcessor body);
public abstract HttpRequest build();
}
可読性がいい(自己解釈型)、ライト?要求されたコンテンツの構成を完了するためにチェーン方式で呼び出し、その後、HttpRequestのインスタンスを取得するためにbuild()を呼び出します。Http Client.Buider
HttpRequestと同様に、Http Clint.newBurderを呼び出してHttp Client.Buiderの例を取得します。それはAPIを提供して、私たちの接続に関するより一般的なものを構成します。以下はソースコードです。
// HttpClient.Builder
public abstract static class Builder {
public abstract Builder cookieManager(CookieManager cookieManager);
public abstract Builder sslContext(SSLContext sslContext);
public abstract Builder sslParameters(SSLParameters sslParameters);
public abstract Builder executor(Executor executor);
public abstract Builder followRedirects(Redirect policy);
public abstract Builder version(HttpClient.Version version);
public abstract Builder priority(int priority);
public abstract Builder proxy(ProxySelector selector);
public abstract Builder authenticator(Authenticator a);
public abstract HttpClient build();
}
真っ白ですね。自己解釈性の良いヘルプIDEはあなたの目的をより良く達成することができます。より多くのJava 9 HTTPクライアントアプリケーションの例
このような明るい未来のAPIを上記で見ました。その応用例についてもっと見てみましょう。
1.GET要求をファイルに保存する
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://labs.consol.de/"))
.GET()
.build();
Path tempFile = Files.createTempFile("consol-labs-home", ".html");
HttpResponse response = client.send(request, HttpResponse.BodyHandler.asFile(tempFile));
System.out.println(response.statusCode());
System.out.println(response.body());
2.POSTでファイルをアップロードするPOSTでローカルファイルをアップロードするのも簡単になりました。HttpRequest.BodyProcessorを使います。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("http://localhost:8080/upload/"))
.POST(HttpRequest.BodyProcessor.fromFile(Paths.get("/tmp/file-to-upload.txt")))
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandler.discard(null));
System.out.println(response.statusCode());
3.非同期HTTP要求非同期HTTP要求も簡単になり、HttpClient_Async()によってHttp Cliennt_茏sendの代わりになります。サービスがサポートされれば、実行中の要求をキャンセルすることもできます。
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://labs.consol.de/"))
.GET()
.build();
CompletableFuture> response = client.sendAsync(request, HttpResponse.BodyHandler.asString());
Thread.sleep(5000);
if(response.isDone()) {
System.out.println(response.get().statusCode());
System.out.println(response.get().body());
} else {
response.cancel(true);
System.out.println("Request took more than 5 seconds... cancelling.");
}
4.システムエージェント設定を使用するHttpClient client = HttpClient.newBuilder()
.proxy(ProxySelector.getDefault())
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://labs.consol.de"))
.GET()
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandler.asString());
System.out.println(response.statusCode());
System.out.println(response.body());
5.基本認証Baic AuthenticationHttpClient client = HttpClient.newBuilder()
.authenticator(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("username", "password".toCharArray());
}
})
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI("https://labs.consol.de"))
.GET()
.build();
HttpResponse response = client.send(request, HttpResponse.BodyHandler.asString());
System.out.println(response.statusCode());
System.out.println(response.body());
結論上記の例は、Java 9の標準APIを使用してHTTP要求を送信するのがより簡単であることを示している。さらに、応答を優雅に処理することができます。もちろん、いくつかの3つのパッケージのような喜びの機能がありますが、一般的には、クリーンなオープンボックスを選択する必要があります。英語のテキスト