Encodera

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

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

Справочник Java

HttpRequest

Неизменяемый HTTP-запрос: адрес, метод, заголовки и тело. Создаётся через newBuilder().

Доступно с: Java 11

Синтаксис

public abstract class HttpRequest

Примеры

Сборка GET-запроса с заголовком и тайм-аутом (сеть для этого не нужна):

import java.net.URI;
import java.net.http.HttpRequest;
 
void main() {
    HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.example.com/users?page=2"))
        .header("Accept", "application/json")
        .timeout(Duration.ofSeconds(10))
        .GET()
        .build();
 
    IO.println(request.method());
    IO.println(request.uri());
    IO.println(request.headers().firstValue("Accept").orElse("-"));
}

Результат:

GET
https://api.example.com/users?page=2
application/json

POST с телом JSON. Локальный сервер возвращает то, что получил:

import com.sun.net.httpserver.HttpServer;
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.http.*;
 
void main() throws Exception {
    HttpServer server = HttpServer.create(new InetSocketAddress("localhost", 0), 0);
    server.createContext("/users", exchange -> {
        String received = new String(exchange.getRequestBody().readAllBytes());
        String type = exchange.getRequestHeaders().getFirst("Content-Type");
        byte[] body = (exchange.getRequestMethod() + " " + type + " " + received).getBytes();
        exchange.sendResponseHeaders(201, body.length);
        exchange.getResponseBody().write(body);
        exchange.close();
    });
    server.start();
    URI uri = URI.create("http://localhost:" + server.getAddress().getPort() + "/users");
 
    String json = """
        {"name": "Anna", "age": 30}""";
    HttpRequest request = HttpRequest.newBuilder(uri)
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(json))
        .build();
 
    try (HttpClient client = HttpClient.newHttpClient()) {
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        IO.println(response.statusCode());
        IO.println(response.body());
    }
    server.stop(0);
}

Результат:

201
POST application/json {"name": "Anna", "age": 30}

Примечания

По умолчанию метод — GET. Другие методы: POST(body), PUT(body), DELETE() и общий method("PATCH", body). Тело задают через BodyPublishers: ofString(), ofFile(path), ofByteArray(), noBody(). Заголовок Content-Type сам не ставится — укажите его явно. Запрос неизменяемый, поэтому один объект можно отправлять много раз и из разных потоков.

См. также

  • HttpClient — Встроенный HTTP-клиент: отправляет запросы синхронно (send) или асинхронно (sendAsync).
  • HttpResponse — Ответ сервера: код статуса, заголовки и тело того типа, который задал BodyHandler.
  • Duration — Промежуток времени в секундах и наносекундах — часы, минуты, секунды.

В учебнике

  • HTTP-клиент — Запросы к веб-серверам из Java — HttpClient, HttpRequest и HttpResponse.BodyHandlers, GET и POST с JSON, коды ответа и асинхронный sendAsync.

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

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