Какие основные форматы данных можно использовать в теле POST-запроса HTTP?

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

Ответ

Формат данных в теле POST-запроса определяется заголовком Content-Type. Основные форматы:

  1. application/x-www-form-urlencoded

    • Что: Стандартный формат для HTML-форм. Данные кодируются в виде пар ключ=значение, объединенных амперсандом &.
    • Пример тела: username=johndoe&password=secret123
    • Когда использовать: Простая отправка текстовых данных из форм.
  2. multipart/form-data

    • Что: Используется для отправки бинарных данных, например, файлов. Тело разделяется на части (parts) границей (boundary).
    • Пример (упрощенно):

      --boundary123
      Content-Disposition: form-data; name="file"; filename="report.pdf"
      Content-Type: application/pdf
      
      [бинарное содержимое файла]
      --boundary123
      Content-Disposition: form-data; name="description"
      
      Quarterly report
      --boundary123--
    • Когда использовать: Загрузка файлов на сервер.
  3. application/json

    • Что: Наиболее распространенный формат для современных RESTful API. Передает структурированные данные в формате JSON.
    • Пример тела: {"title": "New Post", "body": "Content here", "tags": ["tech", "api"]}
    • Когда использовать: Взаимодействие с JSON API.
  4. text/plain, application/xml, text/html

    • Что: Специализированные форматы для передачи простого текста, XML или HTML-разметки.

Практический пример отправки JSON с помощью Python (библиотека requests):

import requests

url = "https://api.example.com/data"
data = {"key": "value"}

# Библиотека requests автоматически устанавливает заголовок Content-Type: application/json
response = requests.post(url, json=data)

# Или явно через параметр `data` и заголовки
response = requests.post(url, data=json.dumps(data), headers={"Content-Type": "application/json"})