Zielony Smok - logo witryny

Aplikacja kliencka do testowania protokołu HTTP/2

Aplikacja kliencka do testowania protokołu HTTP/2

Zakładam, że:

  • Plik fiboservlet.war został umieszczony na serwerze Tomcat w folderze webapps
  • Serwer został uruchomiony i działa na localhost:8080
Klasa FiboServletTest
package http2standard;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
class FiboServletTest {
    public static void main(String[] args) {
        try {
            //URI uri = new URI("http://localhost:8080/fiboservlet/fibo");
            URI uri = new URI("http://zielonysmok.org/fiboservlet/fibo");
            String dane = "fibon=" + URLEncoder.encode("300", StandardCharsets.UTF_8);
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(uri)
                    .header("Content-Type", "application/x-www-form-urlencoded")
                    .header("Accept", "text/plain")
                    .POST(HttpRequest.BodyPublishers.ofString(dane))
                    .build();
            HttpClient.newHttpClient()
                    .sendAsync(request, HttpResponse.BodyHandlers.ofString())
                    .whenComplete(FiboServletTest::podajWynik);
            try {
                Thread.sleep(4000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }
    private static void podajWynik(HttpResponse<String> response, Throwable t) {
        if (t == null) {
            System.out.println("Kod statusu: " + response.statusCode());
            System.out.println("Ciało odpowiedzi: " + response.body());
        } else {
            System.out.println("Coś poszło nie tak: " + t.getMessage());
        }
    }
}
Wynik

Po uruchomieniu zobaczymy:

Kod statusu: 200
Ciało odpowiedzi:
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="styles/fibo.css">
        <title>Twoje wyniki</title>
    </head>
    <body>
        <div>
            <p>300 wyraz ciągu Fibonacciego</p>
            <p>222232244629420445529739893461909967206666939096499764990979600</p>
        </div>
    </body>
</html>

Trochę testów

Tutaj załączam trzy klasy, które pomogą w oswojeniu się z implementacją.

Klasa TestTerierogrod
package http2standard;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
class TestTerierogrod {
    public static void main(String[] args) {
        HttpClient client = HttpClient.newHttpClient();
        try {
            HttpRequest req = HttpRequest.newBuilder().uri(new URI("https://terierogrod.pl")).GET().build();
            HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString());
            int statusCode = res.statusCode();
            String body = res.body();
            System.out.println("Kod statusu 1: " + statusCode);
            //System.out.println("Ciało odpowiedzi 1: " + body);
            res = client.send(req, HttpResponse.BodyHandlers.ofString());
            statusCode = res.statusCode();
            //body = res.body();
            System.out.println("Cialo odpowiedzi 2: " + statusCode);
            //System.out.println("body 2: " + body);
        } catch (URISyntaxException | IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }}
Klasa TestTerierogrod2
package http2standard;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
class /**/TestTerierogrod2 {
    public static void main(String[] args) {
        String resBody = null;
        try {
            resBody = HttpClient.newHttpClient()
                    .send(HttpRequest.newBuilder(new URI("https://terierogrod.pl"))
                                    .GET()
                                    .build(),
                            HttpResponse.BodyHandlers.ofString())
                    .body();
        } catch (IOException | InterruptedException | URISyntaxException e) {
            e.printStackTrace();
        }
        System.out.println("Ciało odpowiedzi: " + resBody);
    }
}
Klasa TestTerierogrod3
package http2standard;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
class TestTerierogrod3 {
    public static void main(String[] args) {
        try {
            URI uri = new URI("https://terierogrod.pl");
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest req = HttpRequest.newBuilder(uri)
                    .method("HEAD", HttpRequest.BodyPublishers.noBody())
                    .build();
            HttpResponse<?> res =
                    client.send(req, HttpResponse.BodyHandlers.discarding());
            System.out.println("Kod statusu : " + res.statusCode());
            System.out.println("Nagłówki odpowiedzi: ");
            res.headers()
                    .map()
                    .entrySet()
                    .forEach(System.out::println);
        } catch (URISyntaxException | InterruptedException | IOException e) {
            e.printStackTrace();
        }
    }
}

Zajrzyj też Java 11: HTTP Client (Standard)