Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как отправить HTTP-запрос

Короткий ответ

Встроенный HttpClient (Java 11) отправляет запросы без сторонних библиотек. Пример обращается к сети, поэтому результат зависит от сервера:

void main() throws Exception {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder(URI.create("https://example.com/")).GET().build();
 
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
 
    IO.println(response.statusCode());
    IO.println(response.body().length());
}

Программа выведет код ответа (например, 200) и длину полученной страницы.

POST с JSON

Тело запроса передаётся через BodyPublishers, заголовки — через header():

void main() throws Exception {
    String json = """
            {"name": "Anna", "email": "anna@site.com"}
            """;
    HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.example.com/users"))
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();
 
    HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
    IO.println(response.statusCode());
}

Тайм-ауты

Задайте тайм-аут соединения у клиента и тайм-аут ответа у запроса:

void main() throws Exception {
    HttpClient client = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(5)).build();
    HttpRequest request = HttpRequest.newBuilder(URI.create("https://example.com/"))
            .timeout(Duration.ofSeconds(10))
            .build();
 
    try {
        IO.println(client.send(request, HttpResponse.BodyHandlers.ofString()).statusCode());
    } catch (HttpTimeoutException e) {
        IO.println("Server did not answer in time");
    }
}

Частая ошибка

Считать, что ответ 404 или 500 — это исключение. HttpClient выбрасывает исключение только при сетевых ошибках, а коды ошибок сервера приходят как обычный ответ. Всегда проверяйте response.statusCode(). Ответ в JSON разбирайте библиотекой — Jackson или Gson.

Функции из этого ответа

  • Text block """ — Многострочный строковый литерал в тройных кавычках.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.