Отправка "multipart/form-data" через "requests" в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для отправки данных формата multipart/form-data с помощью библиотеки requests в Python, используйте метод requests.post(), передавая файлы через параметр files. Вот пример такого кода:

Python
Скопировать код
import requests

url = 'ВАШ_URL'
files = {'file': open('file.txt', 'rb')}

response = requests.post(url, files=files)
print(response.text)

Этот код отправляет файл 'file.txt' на сервер по указанному URL. Переменные url и files должны быть заменены в соответствии со вашими потребностями.

Кинга Идем в IT: пошаговый план для смены профессии

Отправка форм без файлов

Если нужно отправить только данные формы без прикрепленных файлов, воспользуйтесь кортежом (None, data) в значении словаря files:

Python
Скопировать код
fields = {
    ('field1', (None, 'value1')),
    ('field2', (None, 'value2'))
}
response = requests.post(url, files=fields)

Такой подход обеспечивает корректную передачу значений полей формы без добавления файлов.

Управление именем файла и типом содержимого в HTTP-заголовках

Для более точного указания имени файла и типа контента в HTTP-заголовках вы можете применить кортежи внутри словаря files:

Python
Скопировать код
files = {
    'file': ('report.csv', open('report.csv', 'rb'), 'text/csv')
}
response = requests.post(url, files=files)

Приведенный выше пример отправит файл 'report.csv' с указанием типа содержимого text/csv.

Сложная кодировка multipart для экспертов

Для расширенной отправки данных с использованием потоков и настройки HTTP-заголовков может быть полезным использование библиотеки requests_toolbelt:

Python
Скопировать код
from requests_toolbelt import MultipartEncoder

multipart_data = MultipartEncoder(
    fields={
        'field1': 'value1',
        'file': ('passwords.txt', open('passwords.txt', 'rb'), 'text/plain')
    }
)

response = requests.post(url, data=multipart_data, headers={'Content-Type': multipart_data.content_type})

Использование requests_toolbelt позволяет более гибко обрабатывать специфические случаи работы с multipart данными.

Визуализация

Отправка multipart/form-data в Python напоминает собирание чемодана для международного полёта:

Markdown
Скопировать код
В чемодане (отправляемом запросе) могут находиться:
- Одежда (текстовые поля формы)
- Бутылки (файлы)

Используйте requests.post() для отправки "упакованного чемодана":

Python
Скопировать код
requests.post('URL', files=packed_suitcase)

Аналогия с аэропортом:

Markdown
Скопировать код
Чемодан (отправляемый запрос) -> Лейбл (URL назначения)
Одежда (Текстовые поля формы) + Бутылки (Файлы) -> Общий вид содержимого (multipart/form-data)

Сравнивая эндпойнт URL с местом назначения, мы можем представить данные в виде вещей, которые нужно положить в чемодан.

Проверка SSL

Обход ошибок SSL с помощью verify=False – это плохая практика. Лучше решить проблемы с SSL-сертификатами, а не игнорировать их.

Управление загрузкой больших файлов – Время для потоковой передачи

При загрузке больших файлов важно использовать потоковую передачу данных, чтобы избежать перегрузки памяти:

Python
Скопировать код
with open('huge_file.iso', 'rb') as f:
    requests.post(url, data=f)

Такой подход позволяет не загружать весь файл в память сразу.

Интеграция с FastAPI для загрузки файлов

Во время работы с FastAPI, загрузку файлов можно реализовать следующим образом:

Python
Скопировать код
from fastapi import FastAPI, File, UploadFile

app = FastAPI()

@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename}

Этот пример кода демонстрирует, как принимать загруженные файлы на сервере с использованием FastAPI.

Именование и форматирование данных – Внимание к деталям

Правильная подготовка запроса и корректное именование полей и файлов играют важную роль: они должны соответствовать ожиданиям сервера для адекватной обработки multipart данных.

Полезные материалы

  1. Продвинутое использование — документация к библиотеке Requests 2.31.0 — Руководство по использованию multipart/form-data с использованием Requests.
  2. Content-Type – HTTP | MDN — Здесь объясняется смысл заголовка Content-Type и его применение.
  3. Обсуждение на Stack Overflow — Обсуждение, содержащее полезные примеры.
  4. Мега-Учебник по Flask, Часть I: Hello, World! — Статья о загрузке файлов в Flask.
  5. Загрузка данных — документация к requests_toolbelt 1.0.0 — Как использовать encoder для потоковой передачи multipart данных.
  6. Загрузка файлов — документация Flask (версия 1.1.x) — Инструкция по работе с загрузкой файлов в Flask.