[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-11-25-chto-takoe-httpclient-api-v-java-11":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},397,"chto-takoe-httpclient-api-v-java-11",11,"java-11-25","Java 11–25","🆕","Что такое HttpClient API в Java 11?","HttpClient — стандартный HTTP-клиент в JDK, поддерживающий HTTP\u002F1.1 и HTTP\u002F2, синхронные и асинхронные запросы. Заменяет устаревший `HttpURLConnection`.\n\n> **Аналогия из жизни:** если старый `HttpURLConnection` — это отправка письма почтой (долго настраивать, неудобно), то `HttpClient` — мессенджер: отправил запрос, получил ответ, можно отправить несколько одновременно.\n\n\u003Cdetails>\u003Csummary>Пример: создание клиента и запросы\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Создание клиента (рекомендуется переиспользовать)\nHttpClient client = HttpClient.newBuilder()\n    .version(HttpClient.Version.HTTP_2)\n    .connectTimeout(Duration.ofSeconds(10))\n    .followRedirects(HttpClient.Redirect.NORMAL)\n    .build();\n\n\u002F\u002F GET-запрос (синхронный)\nHttpRequest request = HttpRequest.newBuilder()\n    .uri(URI.create(\"https:\u002F\u002Fapi.example.com\u002Fusers\u002F1\"))\n    .header(\"Accept\", \"application\u002Fjson\")\n    .GET()\n    .build();\n\nHttpResponse\u003CString> response = client.send(request,\n    HttpResponse.BodyHandlers.ofString());\n\nSystem.out.println(response.statusCode());  \u002F\u002F 200\nSystem.out.println(response.body());        \u002F\u002F JSON\n\n\u002F\u002F POST-запрос\nHttpRequest postRequest = HttpRequest.newBuilder()\n    .uri(URI.create(\"https:\u002F\u002Fapi.example.com\u002Fusers\"))\n    .header(\"Content-Type\", \"application\u002Fjson\")\n    .POST(HttpRequest.BodyPublishers.ofString(\n        \"\"\"\n        {\"name\": \"John\", \"email\": \"john@example.com\"}\n        \"\"\"))\n    .build();\n\n\u002F\u002F Асинхронный запрос (возвращает CompletableFuture)\nCompletableFuture\u003CHttpResponse\u003CString>> future =\n    client.sendAsync(request, HttpResponse.BodyHandlers.ofString());\n\nfuture.thenApply(HttpResponse::body)\n      .thenAccept(System.out::println)\n      .join();\n```\n\n\u003C\u002Fdetails>\n\n### Чтение ответа в разные типы\n\n```java\n\u002F\u002F В строку\nHttpResponse\u003CString> str = client.send(req, BodyHandlers.ofString());\n\u002F\u002F В файл\nHttpResponse\u003CPath> file = client.send(req, BodyHandlers.ofFile(Path.of(\"out.json\")));\n\u002F\u002F В InputStream\nHttpResponse\u003CInputStream> stream = client.send(req, BodyHandlers.ofInputStream());\n\u002F\u002F Отбросить тело\nHttpResponse\u003CVoid> discarded = client.send(req, BodyHandlers.discarding());\n```\n\n### Частые ошибки\n\n- Создание нового `HttpClient` на каждый запрос — дорого; переиспользуйте экземпляр\n- Не обрабатывать HTTP-статусы — `send()` не бросает исключение для 4xx\u002F5xx; проверяйте `statusCode()`\n- Блокирующий `join()` на `sendAsync()` — теряется смысл асинхронности; используйте `thenApply`\u002F`thenAccept`\n\n### Как используется в 2026\n\n- В Spring-приложениях вместо HttpClient чаще используют `RestClient` (Spring 6.1+) или `WebClient`\n- HttpClient из JDK полезен для standalone-приложений и библиотек без Spring-зависимостей\n- В микросервисах HTTP-клиент обычно оборачивается в абстракцию с retry, timeout, circuit breaker\n\n> **На собеседовании:** важно упомянуть потокобезопасность `HttpClient` (один экземпляр на приложение), нативную поддержку HTTP\u002F2 и то, что `send()` не бросает исключение для 4xx\u002F5xx — нужна ручная проверка `statusCode()`.","","junior",[15],"java-modern",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":20,"featuredSnippetReady":23},"Что такое HttpClient API в Java 11? — Gymterview","HttpClient — стандартный HTTP-клиент в JDK, поддерживающий HTTP\u002F1.1 и HTTP\u002F2, синхронные и асинхронные запросы. Заменяет устаревший `HttpURLConnection`.","HttpClient — стандартный HTTP-клиент в JDK, поддерживающий HTTP\u002F1.1 и HTTP\u002F2, синхронные и асинхронные запросы. Заменяет",[15,13],true]