Перейти к основному содержимому

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

· 2 мин. чтения

1. Обзор

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

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

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

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

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

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

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

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

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

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

Чтобы отправить запрос POST, нам нужно установить для свойства метода запроса значение POST:

con.setRequestMethod("POST");

2.4. Установите параметр заголовка Content-Type запроса

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

В противном случае сервер возвращает код состояния HTTP «400-bad request»:

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

2.5. Установить тип формата ответа

Установите заголовок запроса «Accept» на «application/json» , чтобы прочитать ответ в нужном формате:

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

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

Чтобы отправить содержимое запроса, установите для свойства doOutput объекта URLConnection значение 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.