Метод connectTimeout
Метод connectTimeout класса HttpClient задает
максимальное время, в течение которого клиент будет пытаться
установить соединение с сервером. Если соединение не будет
установлено за указанный промежуток времени, будет выброшено
исключение HttpConnectTimeoutException. В параметр метода
мы передаем объект Duration, представляющий длительность
таймаута. Метод возвращает новый объект HttpClient
с измененной настройкой.
Метод доступен только через HttpClient.Builder,
так как класс HttpClient является неизменяемым.
Это означает, что для установки таймаута подключения
необходимо сначала создать билдер, вызвать метод
connectTimeout, а затем собрать клиент
с помощью метода build.
Синтаксис
HttpClient.Builder.connectTimeout(Duration duration)
Пример
Давайте создадим HttpClient с таймаутом подключения
равным 5 секундам и выполним GET-запрос:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class Main
{
public static void main(String[] args) throws Exception
{
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(5))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.statusCode());
}
}
Результат выполнения кода:
200
Пример
Давайте установим таймаут подключения равным 500
миллисекундам. Если сервер не ответит за это время,
будет выброшено исключение:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpConnectTimeoutException;
import java.time.Duration;
public class Main
{
public static void main(String[] args)
{
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofMillis(500))
.build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.GET()
.build();
try
{
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.statusCode());
}
catch (HttpConnectTimeoutException e)
{
System.out.println("Connection timed out");
}
catch (Exception e)
{
System.out.println("Other error");
}
}
}
Результат выполнения кода (при превышении таймаута):
"Connection timed out"
Пример
Давайте создадим клиент с таймаутом подключения
равным 10 секундам и проверим его настройки
через метод connectTimeout:
import java.net.http.HttpClient;
import java.time.Duration;
import java.util.Optional;
public class Main
{
public static void main(String[] args)
{
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
Optional<Duration> timeout = client.connectTimeout();
System.out.println(timeout.get().getSeconds());
}
}
Результат выполнения кода:
10
Смотрите также
-
класс
HttpClient,
который используется для отправки HTTP-запросов -
метод
connectTimeout,
который устанавливает таймаут подключения в билдере -
метод
build,
который создает объект HttpClient -
метод
send,
который отправляет синхронный HTTP-запрос