@@ -103,3 +103,64 @@ void main() {
103103
104104}
105105```
106+
107+ ## Website status
108+
109+ Asynchronously checks status of multiple websites.
110+
111+ ``` java
112+ package com.zetcode ;
113+
114+ import java.net.URI ;
115+ import java.net.http.HttpClient ;
116+ import java.net.http.HttpRequest ;
117+ import java.net.http.HttpResponse ;
118+ import java.time.Duration ;
119+ import java.util.List ;
120+ import java.util.concurrent.CompletableFuture ;
121+ import java.util.stream.Stream ;
122+
123+ public class WebSiteStatus {
124+
125+ public static void main (String [] args ) {
126+
127+ List<URI > uris = Stream
128+ .of(" https://www.google.com/" , " https://clojure.org" ,
129+ " https://www.rust-lang.org" , " https://golang.org" ,
130+ " https://www.python.org" ,
131+ " https://code.visualstudio.com" , " https://ifconfig.me" ,
132+ " http://termbin.com" , " https://www.github.com/" )
133+ .map(URI :: create). toList();
134+
135+ HttpClient httpClient = HttpClient . newBuilder()
136+ .connectTimeout(Duration . ofSeconds(10 ))
137+ .followRedirects(HttpClient . Redirect . ALWAYS ). build();
138+
139+ var futures = uris. stream(). map(uri - > verifyUri(httpClient, uri))
140+ .toArray(CompletableFuture []:: new );
141+
142+ CompletableFuture . allOf(futures). join();
143+ }
144+
145+ private static CompletableFuture<Void > verifyUri(HttpClient httpClient,
146+ URI uri) {
147+ HttpRequest request = HttpRequest . newBuilder()
148+ .timeout(Duration . ofSeconds(5 )). uri(uri). build();
149+
150+ return httpClient
151+ .sendAsync(request, HttpResponse . BodyHandlers . discarding())
152+ .thenApply(HttpResponse :: statusCode)
153+ .thenApply(statusCode - > statusCode == 200 )
154+ .exceptionally(ex - > false ). thenAccept(valid - > {
155+ if (Boolean . TRUE. equals(valid)) {
156+ System . out. printf(" [SUCCESS] Verified %s%n" , uri);
157+ } else {
158+ System . out. printf(" [FAILURE] Failed to verify%s%n" ,
159+ uri);
160+ }
161+ });
162+ }
163+ }
164+ ```
165+
166+
0 commit comments