Java 9 comes with new HTTP client api that implements http/2 and websocket and it can replace old HttpURLConnection api.

It will be delivered as an incubator module.

There are mainly three handy classes HttpClinet , HttpRequest , HttpResponse

HttpRequest:

Represents one HTTP request which can be sent to a server. HttpRequests are built from HttpRequest builders. HttpRequest builders are obtained from a HttpClientby calling HttpClient.request, or by calling HttpRequest.create which returns a builder on the default client.

HttpResponse:

Represents a response to a HttpRequest. A HttpResponse is available when the response status code and headers have been received, but before the response body is received.

Note:

Below examples requires jdk.incubator.httpclient,It should be in our module-info.java.Refer Java 9 module example for more details on modularity.

Example 1:

Using new http client api we can build HttpRequest ,send using HttpClinet and define response bodyhandler,here we have use asString as a response body handler.We can also get information regarding sslParameters like maximum packet size ,cipher suits , client authentication needed or not , etc…

public void getHttpResponseAsString(){
        try {
            HttpClient client = HttpClient.newHttpClient();

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(new URI("http://javadeveloperzone.com/java-basic/java-9-features/java-9-module-example/"))
                    .GET()
                    .build();

            //String body handler
            HttpResponse<String> strResponse = client.send(request, HttpResponse.BodyHandler.asString());

            System.out.println(strResponse.statusCode());
            SSLParameters sslParameters = strResponse.sslParameters();
            System.out.println("Maximum packet size : "+sslParameters.getMaximumPacketSize());
            //System.out.println(response.body());
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

Example 2: (Save HttpResponse in local file)

We can save response in our local file system using HttpResponse.BodyHandler.asFile() method.

public void saveHttpResponseAsFile(){
        try {
            HttpClient client = HttpClient.newHttpClient();

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(new URI("http://javadeveloperzone.com/java-basic/java-9-features/java-9-module-example/"))
                    .GET()
                    .build();

            //String body handler
            HttpResponse<String> strResponse = client.send(request, HttpResponse.BodyHandler.asString());
            //Path tempFile = Files.createFile("test", ".html");
            Path tempFile = Paths.get("G:\\study\\Blogs\\Applications\\Sample.html");

            HttpResponse<Path> response = client.send(request, HttpResponse.BodyHandler.asFile(tempFile));

            System.out.println(response.statusCode());
            //System.out.println(response.body());
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Example 3 : (Asynchronous HTTP Request)

sendAsSync method of HttpClient class is used to send an asynchronous request to servers. We can kill any request if it takes more than a specified time duration.

public void sendAsynchronousRequest(){
        try {
            HttpClient client = HttpClient.newHttpClient();

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(new URI("http://javadeveloperzone.com/java-basic/java-9-features/java-9-module-example/"))
                    .GET()
                    .build();

            //String body handler
            CompletableFuture<HttpResponse<String>> strResponse = client.sendAsync(request, HttpResponse.BodyHandler.asString());

            Thread.sleep(200);
            if(strResponse.isDone()){
                System.out.println(strResponse.get().statusCode());
            }else{
                System.out.println("Request take more than 200 millisecons...");
                strResponse.cancel(true);
                if(strResponse.isCancelled()){
                    System.out.println("request cancelled !!!");
                }
            }
            //System.out.println(response.body());
        } catch (URISyntaxException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

 Output:

WARNING: Using incubator modules: jdk.incubator.httpclient
Request take more than 200 milliseconds...
request cancelled !!!

Example 4 : (Set Basic Authentication)

We can set username and password using an authenticator.

public void setBasicAuth(){
        try {
            HttpClient client = HttpClient.newBuilder()
                    .authenticator(new Authenticator() {
                        @Override
                        protected PasswordAuthentication getPasswordAuthentication() {
                            return new PasswordAuthentication("username", "password".toCharArray());
                        }
                    })
                    .build();

            HttpRequest request = HttpRequest.newBuilder()
                    .uri(new URI("http://javadeveloperzone.com/java-basic/java-9-features/java-9-module-example/"))
                    .GET()
                    .build();

            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandler.asString());
            System.out.println(response.statusCode());
            System.out.println(response.body());
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

 

 

References:

Source Code:

Click here to Download Source Code

You can also download the source code of Java 9 New Http Client API Example from our git repository.

Was this post helpful?
Let us know, if you liked the post. Only in this way, we can improve us.
Yes
No

Leave a Reply

Your email address will not be published. Required fields are marked *