Что передается в теле (Body) HTTP-запроса и в каких форматах?

Ответ

Тело (Body) HTTP-запроса содержит данные, отправляемые на сервер. Его наличие и формат определяются методом запроса и заголовком Content-Type.

Основные форматы тела запроса:

Метод Тип контента (Content-Type) Пример тела (Body) Назначение
POST/PUT application/json {"username": "john", "active": true} Стандарт для REST API, передача структурированных данных.
POST application/x-www-form-urlencoded username=john&active=true Данные формы, кодируются в строку запроса.
POST multipart/form-data Граница между частями с данными и файлами Отправка бинарных файлов (загрузка изображений, документов).
GET (обычно не указывается) Тело отсутствует Параметры передаются в URL как query-строка (?id=1).

Практические примеры с использованием requests (Python):

import requests

# 1. POST с JSON (автоматически устанавливает Content-Type: application/json)
response = requests.post('https://api.example.com/login', 
                         json={"email": "user@example.com", "password": "secret"})

# 2. POST с form-urlencoded (данные формы)
response = requests.post('https://api.example.com/form',
                         data={"key1": "value1", "key2": "value2"})

# 3. POST с файлом (multipart/form-data)
files = {'file': open('report.pdf', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)

Важно для тестирования: Всегда проверяйте, что заголовок Content-Type соответствует фактическому формату передаваемых данных, иначе сервер может не обработать запрос корректно.

Ответ 18+ 🔞

А, слушай, смотри, вот эта штука — тело запроса, блядь. Это как бы груз, который ты на сервер везешь. Есть он или нет, и в каком виде — зависит от того, какой ты метод используешь и что в заголовке Content-Type написано, ёпта.

Короче, основные форматы этой самой «посылки»:

Метод Заголовок (Content-Type) Пример тела Зачем это надо?
POST/PUT application/json {"username": "john", "active": true} Это как золотой стандарт для API, чтобы структурированные данные слать.
POST application/x-www-form-urlencoded username=john&active=true Старые-добрые данные из форм, превращенные в одну длинную строку.
POST multipart/form-data Там границы всякие, части с данными и файлами Когда нужно отправить файлы — картинки, документы, вот это всё.
GET (обычно не пишется) Тела нет, блядь! Параметры лепятся прямо в URL, после знака вопроса (?id=1).

А вот как это на практике в requests (Python) выглядит, чтобы ты не пиздел, что не понял:

import requests

# 1. POST с JSON (библиотека сама проставит Content-Type: application/json, красота!)
response = requests.post('https://api.example.com/login',
                         json={"email": "user@example.com", "password": "secret"})

# 2. POST с form-urlencoded (обычные данные формы)
response = requests.post('https://api.example.com/form',
                         data={"key1": "value1", "key2": "value2"})

# 3. POST с файлом (multipart/form-data — тут уже цирк с файлами)
files = {'file': open('report.pdf', 'rb')}
response = requests.post('https://api.example.com/upload', files=files)

И главное, блядь, для тестирования: Всегда смотри, чтобы заголовок Content-Type совпадал с тем, что ты реально в тело пихаешь. А то отправишь JSON, а в заголовке напишешь, что это форма — сервер тебя просто не поймёт, и будет тебе волнение ебать и терпения ноль ебать, пока ищешь, в чём косяк.