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