SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Языки и платформы

Java HttpURLConnection.connect: соединение ещё не HTTP-успех

Имя connect встречается во многих API и не обозначает один универсальный сетевой метод. В примере ниже используется Java HttpURLConnection: он создаётся через URLConnection и работает с HTTP, а не с произвольным интерфейсом Connection.

Пример с таймаутами

var url = java.net.URI.create("https://example.com/").toURL();
var connection = (java.net.HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
connection.setRequestMethod("GET");
try {
    connection.connect();
    int status = connection.getResponseCode();
    System.out.println("HTTP " + status);
} finally {
    connection.disconnect();
}

Фрагмент выполняют внутри метода с обработкой IOException либо throws. Вызов getResponseCode и чтение тела могут инициировать соединение сами; отдельный connect не всегда обязателен.

Интерпретация

  • Отказ подключения и HTTP404 — разные ситуации:404 означает полученный ответ.
  • Только200 недостаточно как универсального критерия: допустимые статусы зависят от операции.
  • Read timeout ограничивает ожидание чтения, connect timeout — установление соединения.
  • Если читается тело, поток нужно закрывать; для HTTP-ошибок учитывайте error stream.

Не отключайте проверку HTTPS-сертификата для исправления сетевой ошибки. При недоверенном URL ограничивайте разрешённые назначения и редиректы: серверный fetch может стать SSRF. Для нового Java-кода можно также рассмотреть java.net.http.HttpClient с собственной моделью запросов.

Документация