Статья: Как выполнять 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
и возвращаются в виде строки.
Результат выполнения
- GET запрос: получаем JSON-ответ с данными.
- POST запрос: отправляем JSON-данные и получаем ответ о создании ресурса.
Полный код программы
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.