3) запросы (requests)
Виды запросов в HTTP
В HTTP существует 9 основных видов запросов, которые используются для взаимодействия между клиентом и сервером:
- GET: Запрос на получение ресурса с сервера.
- POST: Запрос на создание нового ресурса на сервере.
- PUT: Запрос на обновление существующего ресурса на сервере.
- DELETE: Запрос на удаление ресурса с сервера.
- HEAD: Запрос на получение метаданных ресурса с сервера без получения содержимого ресурса.
- OPTIONS: Запрос на получение списка поддерживаемых методов запроса для ресурса.
- CONNECT: Запрос на установление туннеля к серверу.
- PATCH: Запрос на частичное обновление ресурса на сервере.
-
TRACE: Запрос на получение трассировки запроса.
-
Пример HTTP запроса
Пример GET запроса на получение главной страницы сайта example.com:
GET / HTTP/1.1 Host: example.com Accept: text/html User-Agent: Mozilla/5.0
В этом примере:
GET
- метод запроса.
/ - путь к ресурсу, который мы хотим получить.
HTTP/1.1
- версия протокола HTTP.
Host: example.com - заголовок, указывающий домен сервера.
Accept: text/html
- заголовок, указывающий тип данных, которые мы хотим получить.
User-Agent: Mozilla/5.0 - заголовок, указывающий тип браузера, который отправляет запрос.
поотправлять запросы можно с PO/postman у меня есть аккаунт keepass
Тело запроса (Request Body) - это часть HTTP-запроса, которая содержит данные, отправляемые клиентом на сервер. Тело запроса может быть использовано для передачи различных типов данных, таких как текст, изображения, файлы и т. д.
В Java программе можно обработать тело запроса с помощью класса HttpServletRequest. Этот класс предоставляет методы для получения данных из тела запроса.
Приведу пример работы с обработкой запроса и тела запроса в Java программе с использованием фреймворка Spring Boot:
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;
@RestController public class MyController {
@PostMapping("/processRequest")
public String processRequest(@RequestBody String requestBody, HttpServletRequest request) {
// Получаем данные из тела запроса
String body = requestBody;
// Получаем данные из тела запроса с помощью BufferedReader
StringBuilder sb = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
String body2 = sb.toString();
// Обрабатываем данные
System.out.println("Тело запроса: " + body);
System.out.println("Тело запроса (с помощью BufferedReader): " + body2);
return "Запрос обработан";
}
}
В этом примере мы создали контроллер MyController с методом processRequest, который обрабатывает POST-запросы на URL /processRequest. Мы используем аннотацию @RequestBody для получения данных из тела запроса в виде строки.
Также мы используем HttpServletRequest для получения данных из тела запроса с помощью BufferedReader. Это позволяет нам получить данные из тела запроса в виде строки.
В обоих случаях мы выводим полученные данные в консоль для демонстрации работы с телом запроса.
Чтобы отправить запрос на этот контроллер, можно использовать инструменты, такие как Postman или curl. Например, с помощью curl можно отправить запрос следующим образом:
curl -X POST -H "Content-Type: text/plain" -d "Hello, World!" http://localhost:8080/processRequest
Это отправит POST-запрос на URL /processRequest с телом запроса "Hello, World!". Контроллер обработает этот запрос и выведет полученные данные в консоль.