Как выполнять GET и POST запросы на Java

Тема: Уроки Java

Дата создания: 8 декабря 2024 г. 20:18

Как выполнять GET и POST запросы на Java

Статья: Как выполнять GET и POST запросы на Java с помощью HttpURLConnection

HttpURLConnection — это стандартный класс Java для выполнения HTTP-запросов. В этой статье мы создадим пример программы, которая выполняет GET и POST запросы к серверу, а также разберём её работу по частям.

Разбиение программы на части

1. Подключение библиотек

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;



Для работы с HTTP-запросами используется HttpURLConnection, а для чтения и записи данных — классы BufferedReader, InputStreamReader и OutputStream.

2. Основной метод main

String getUrl = "https://jsonplaceholder.typicode.com/posts/1";
String postUrl = "https://jsonplaceholder.typicode.com/posts";



Эти строки содержат URL-адреса для GET и POST запросов.

String getResponse = sendGetRequest(getUrl);
String postResponse = sendPostRequest(postUrl, postData);



Здесь мы вызываем методы для выполнения GET и POST запросов и выводим результат.

3. Метод для выполнения GET запроса

public static String sendGetRequest(String url) throws Exception {
    URL obj = new URL(url);
    HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
    connection.setRequestMethod("GET");
    int responseCode = connection.getResponseCode();



1. Создание соединения: создаётся объект URL и устанавливается метод запроса (GET).
2. Получение кода ответа: метод getResponseCode() возвращает HTTP-код (например, 200 OK).

BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String inputLine;
while ((inputLine = in.readLine()) != null) {
    response.append(inputLine);
}



3. Чтение данных: ответ сервера считывается построчно через BufferedReader.

4. Метод для выполнения POST запроса

connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json; utf-8");
connection.setRequestProperty("Accept", "application/json");
connection.setDoOutput(true);



1. Установка заголовков: для POST запроса указываем, что данные будут в формате JSON.
2. Отправка данных: метод setDoOutput(true) разрешает запись данных в тело запроса.

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



3. Запись JSON данных: с помощью OutputStream отправляем строку в формате JSON.

5. Чтение ответа сервера

Метод обработки ответа для GET и POST запросов аналогичен: данные считываются через BufferedReader и возвращаются в виде строки.

Результат выполнения

Полный код программы

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpClientExample {

    public static void main(String[] args) {
        // URL для GET и POST запросов
        String getUrl = "https://jsonplaceholder.typicode.com/posts/1"; // Пример URL для GET запроса
        String postUrl = "https://jsonplaceholder.typicode.com/posts"; // Пример URL для POST запроса

        try {
            System.out.println("GET запрос:");
            String getResponse = sendGetRequest(getUrl); // Выполняем GET запрос
            System.out.println(getResponse);

            System.out.println("\nPOST запрос:");
            String postData = "{ \"title\": \"foo\", \"body\": \"bar\", \"userId\": 1 }"; // JSON для отправки
            String postResponse = sendPostRequest(postUrl, postData); // Выполняем POST запрос
            System.out.println(postResponse);

        } catch (Exception e) {
            e.printStackTrace(); // Обработка ошибок
        }
    }

    // Метод для выполнения GET запроса
    public static String sendGetRequest(String url) throws Exception {
        URL obj = new URL(url); // Создаем объект URL
        HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); // Открываем соединение

        connection.setRequestMethod("GET"); // Устанавливаем метод запроса: GET

        int responseCode = connection.getResponseCode(); // Получаем код ответа
        System.out.println("GET Response Code :: " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_OK) { // Если запрос успешен
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); // Читаем поток данных
            StringBuilder response = new StringBuilder();
            String inputLine;

            while ((inputLine = in.readLine()) != null) { // Считываем ответ строка за строкой
                response.append(inputLine);
            }
            in.close();
            return response.toString(); // Возвращаем тело ответа
        } else {
            return "GET запрос не выполнен. Код ответа: " + responseCode;
        }
    }

    // Метод для выполнения POST запроса
    public static String sendPostRequest(String url, String jsonInputString) throws Exception {
        URL obj = new URL(url); // Создаем объект URL
        HttpURLConnection connection = (HttpURLConnection) obj.openConnection(); // Открываем соединение

        connection.setRequestMethod("POST"); // Устанавливаем метод запроса: POST
        connection.setRequestProperty("Content-Type", "application/json; utf-8"); // Устанавливаем заголовки
        connection.setRequestProperty("Accept", "application/json");

        connection.setDoOutput(true); // Разрешаем отправку данных

        try (OutputStream os = connection.getOutputStream()) { // Пишем данные в тело запроса
            byte[] input = jsonInputString.getBytes("utf-8");
            os.write(input, 0, input.length);
        }

        int responseCode = connection.getResponseCode(); // Получаем код ответа
        System.out.println("POST Response Code :: " + responseCode);

        if (responseCode == HttpURLConnection.HTTP_CREATED || responseCode == HttpURLConnection.HTTP_OK) { // Если запрос успешен
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); // Читаем поток данных
            StringBuilder response = new StringBuilder();
            String inputLine;

            while ((inputLine = in.readLine()) != null) { // Считываем ответ строка за строкой
                response.append(inputLine);
            }
            in.close();
            return response.toString(); // Возвращаем тело ответа
        } else {
            return "POST запрос не выполнен. Код ответа: " + responseCode;
        }
    }
}



Заключение

Этот код демонстрирует базовые возможности работы с HTTP-запросами на Java с помощью класса HttpURLConnection. Несмотря на простоту, данный подход подходит для небольших задач. Для более сложных проектов рекомендуется использовать сторонние библиотеки, такие как OkHttp или Apache HttpClient.

Ко всем постам