Skip to content

Commit 7047da6

Browse files
authored
Update README.md
1 parent 05ac2c9 commit 7047da6

1 file changed

Lines changed: 61 additions & 0 deletions

File tree

‎async/completablefuture/README.md‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)