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)