受信したパラメーターをエコー バックする Tomcat にデプロイされた小さなサンプル サーブレットがあります。Tomcat は、HTTP/1.1 および HTTP/2 をサポートするように構成されています。curl
HTTP/1.1 と HTTP/2 の両方で動作することを示すサーブレットへの GET 要求を作成するために使用できます。
Apache HTTP 5.0 クライアントを使用して、サーブレットをヒットする単体テストとPOST
、正常に機能するいくつかのパラメーター (要求コンテンツ) を含む要求があります。サーバーはパラメーターを受け取り、それらを読み取ることができるクライアントに返します。このテストでは、呼び出しを使用して HTTP/1.1 または HTTP/2 を使用するようにクライアントをCloseableHttpAsyncClient.setVersionPolicy()
呼び出します。ただし、HTTP/2 を使用するように変更すると、クライアントは要求コンテンツをサーバーに送信しません。
setVersionPolicy(HttpVersionPolicy.FORCE_HTTP_1)
以下は、成功した HTTP/1.1 呼び出しのサンプル コードです。. それを変更するとFORCE_HTTP_2
、呼び出しは HTTP/2.0 経由で行われますが、リクエストの内容は送信されません。
誰かが私が間違っていることや、何をする必要があるかを提案できますか? 新しい Apache 5.0 クライアント ライブラリの使用に関する多くのドキュメントは見つかりませんでした。サンプルには、送信および POST コンテンツ (または少なくとも私が見つけたもの) が示されていません。
public void testWithHTTP1() throws Exception {
final String content = "Code=99&Message=Hello";
final String contentType = "application/text";
final CloseableHttpAsyncClient client = HttpAsyncClients.custom()
.setVersionPolicy(HttpVersionPolicy.FORCE_HTTP_1)
.build();
client.start();
final HttpHost target = new HttpHost("http","localhost",8002);
final String requestUri = "/VSFTestMT_Test/Test/Test_EchoHttpGet";
final HttpClientContext clientContext = HttpClientContext.create();
final SimpleHttpRequest httppost = SimpleHttpRequests.post(target, requestUri);
httppost.setBody(content, ContentType.create("application.x_www_form_urlencoded"));
final Future<SimpleHttpResponse> future = client.execute(
httppost,
clientContext,
new FutureCallback<SimpleHttpResponse>() {
@Override
public void completed(final SimpleHttpResponse response) {
System.out.println(requestUri + "->" + response.getCode());
System.out.println(response.getBody());
}
@Override
public void failed(final Exception ex) {
System.out.println(requestUri + "->" + ex);
}
@Override
public void cancelled() {
System.out.println(requestUri + " cancelled");
}
});
System.out.println("Shutting down");
client.close(CloseMode.GRACEFUL);
}