Рубрики
Без рубрики

Выполнение запроса JSON POST с помощью HttpURLConnection

Быстрое и практическое введение в выдачу почтовых запросов с использованием HttpURLConnection.

Автор оригинала: baeldung.

1. Обзор

В этом уроке мы продемонстрируем, как сделать запрос JSON POST с помощью HttpURLConnection .

Дальнейшее чтение:

Сделайте простой HTTP-запрос на Java

Аутентификация с помощью HttpURLConnection

Подключение через Прокси-серверы в ядре Java

2. Создание запроса JSON POST с помощью HttpURLConnection

2.1. Создайте объект URL

Давайте создадим объект URL с целевой строкой URI, которая принимает данные JSON с помощью метода HTTP POST:

URL url = new URL ("https://reqres.in/api/users");

2.2. Откройте соединение

Из приведенного выше объекта URL мы можем вызвать метод open Connection , чтобы получить объект HttpURLConnection|/.

Мы не можем создать экземпляр HttpURLConnection напрямую, так как это абстрактный класс:

HttpURLConnection con = (HttpURLConnection)url.openConnection();

2.3. Установите метод запроса

Чтобы отправить запрос на публикацию, мы должны установить свойство метода запроса на ПУБЛИКАЦИЮ:

con.setRequestMethod("POST");

2.4. Установите параметр заголовка типа содержимого запроса

Установите “content-type” заголовок запроса в “application/json” , чтобы отправить содержимое запроса в форме JSON. Этот параметр должен быть установлен для отправки тела запроса в формате JSON.

В противном случае сервер возвращает код состояния HTTP “400-плохой запрос”:

con.setRequestProperty("Content-Type", "application/json; utf-8");

Кроме того, обратите внимание, что мы упомянули кодировку кодировки вместе с типом контента. Это полезно, если кодировка содержимого запроса отличается от кодировки UTF-8, которая является кодировкой по умолчанию.

2.5. Установите Тип Формата Ответа

Установите “Принять” заголовок запроса на “приложение/json” чтобы прочитать ответ в нужном формате:

con.setRequestProperty("Accept", "application/json");

2.6. Убедитесь, что Соединение Будет Использоваться для Отправки Контента

Чтобы отправить содержимое запроса, давайте включим свойство URLConnection объекта do Output в true .

В противном случае мы не сможем записывать содержимое в выходной поток подключения:

con.setDoOutput(true);

2.7. Создайте тело запроса

После создания пользовательской строки JSON:

String jsonInputString = "{"name": "Upendra", "job": "Programmer"}";

Нам нужно было бы написать его:

try(OutputStream os = con.getOutputStream()) {
    byte[] input = jsonInputString.getBytes("utf-8");
    os.write(input, 0, input.length);			
}

2.8. Считывание Ответа Из Входного Потока

Получите входной поток для чтения содержимого ответа. Не забудьте использовать try-with-resources, чтобы автоматически закрыть поток ответов.

Прочитайте все содержимое ответа и распечатайте окончательную строку ответа:

try(BufferedReader br = new BufferedReader(
  new InputStreamReader(con.getInputStream(), "utf-8"))) {
    StringBuilder response = new StringBuilder();
    String responseLine = null;
    while ((responseLine = br.readLine()) != null) {
        response.append(responseLine.trim());
    }
    System.out.println(response.toString());
}

Если ответ в формате JSON, используйте любые сторонние анализаторы JSON, такие как библиотека Джексона , Gson или org.json, для анализа ответа.

3. Заключение

В этой статье мы узнали, как сделать запрос POST с телом содержимого JSON с помощью HttpURLConnection .

Как всегда, соответствующие фрагменты кода можно найти на GitHub