← Назад к вопросам

Как отправить в теле запроса файл

2.0 Middle🔥 121 комментариев
#Тестирование API

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отправка файла в теле HTTP-запроса

Отправка файла в теле HTTP-запроса — одна из распространённых задач при тестировании API, особенно RESTful-сервисов, которые работают с бинарными данными, изображениями, документами и другими медиафайлами. Основной подход — использование multipart/form-data кодировки, хотя в некоторых случаях может применяться прямая отправка сырых бинарных данных. Как QA-инженер, я должен уметь выполнять такие запросы через различные инструменты, включая Postman, curl, и скрипты на Python.

Ключевые методы отправки файла

  1. Multipart/form-data — стандартный способ загрузки файлов через HTML-формы и API. В этом случае тело запроса разделяется на части (parts), каждая из которых содержит заголовки и данные для отдельного поля формы или файла.
  2. Raw/binary — файл отправляется как есть, в сыром виде, обычно с соответствующим MIME-типом (например, image/png). Часто используется для простых upload-эндпоинтов.
  3. Base64-encoded data — файл кодируется в Base64 и отправляется как строка в JSON-теле. Может применяться, если API ожидает данные в JSON, но не поддерживает multipart.

Примеры кода и инструментов

Через cURL

cURL — мощный инструмент командной строки, который я часто использую для быстрой проверки API.

# Отправка файла с именем "file" в multipart-запросе
curl -X POST https://api.example.com/upload \
  -F "file=@/path/to/file.jpg" \
  -F "description=Тестовое изображение"
# Отправка сырого файла с указанием MIME-типа
curl -X POST https://api.example.com/upload \
  -H "Content-Type: image/jpeg" \
  --data-binary @/path/to/file.jpg

Через Postman

В Postman для отправки файла нужно:

  • Выбрать метод POST (или другой требуемый).
  • Ввести URL эндпоинта.
  • Перейти на вкладку Body, выбрать form-data.
  • Ввести ключ (например, "file"), выбрать тип File и загрузить файл с диска.

Postman автоматически сгенерирует правильные заголовки, включая Content-Type: multipart/form-data с boundary.

Через Python (requests)

Для автоматизации в тестах я использую библиотеку requests.

import requests

url = 'https://api.example.com/upload'
file_path = '/path/to/file.jpg'

# Multipart-отправка
with open(file_path, 'rb') as f:
    files = {'file': ('file.jpg', f, 'image/jpeg')}
    data = {'description': 'Тестовое изображение'}
    response = requests.post(url, files=files, data=data)
    print(response.status_code, response.json())

# Отправка сырых бинарных данных
with open(file_path, 'rb') as f:
    headers = {'Content-Type': 'image/jpeg'}
    response = requests.post(url, data=f, headers=headers)
    print(response.status_code)

Что проверять в качестве QA

При тестировании загрузки файлов я уделяю внимание следующим аспектам:

  • Валидация типа файла: API должен корректно обрабатывать разрешённые MIME-типы (например, image/jpeg, application/pdf) и возвращать ошибку для запрещённых.
  • Размер файла: Проверка ограничений на максимальный размер; запрос с слишком большим файлом должен отклоняться с соответствующим HTTP-кодом (например, 413 Payload Too Large).
  • Имя файла и кодировка: Обработка файлов с пробелами, кириллицей или специальными символами в имени.
  • Пустой файл: Отправка файла нулевого размера — должна быть либо запрещена, либо корректно обработана.
  • Несколько файлов: Если API поддерживает множественную загрузку, проверяю отправку нескольких файлов одновременно.
  • Заголовки запроса: Content-Type для multipart должен включать boundary; для binary — соответствующий MIME-тип.
  • Безопасность: Попытка загрузить файл с потенциально опасным содержимым (например, скрипты) должна блокироваться.
  • Ответ сервера: Проверяю HTTP-статус (200 OK, 201 Created при успехе), корректность JSON-ответа (например, ссылка на загруженный файл), обработку ошибок с понятными сообщениями.
  • Производительность: Загрузка больших файлов не должна приводить к таймаутам или падению сервиса.

Заключение

Отправка файла в теле запроса — задача, требующая внимания к деталям: кодировке, заголовкам, ограничениям сервера. Как QA-инженер, я использую комбинацию инструментов (Postman для ручного тестирования, curl для быстрых проверок, Python-скрипты для автоматизации) и проверяю не только сценарии успеха, но и граничные случаи. Это обеспечивает надёжность и безопасность функционала загрузки файлов в приложении.