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

«Что передается в теле (Body) HTTP-запроса и в каких форматах?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тело (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 соответствует фактическому формату передаваемых данных, иначе сервер может не обработать запрос корректно.