CURL POST запит, складовийвміст (multipart

Тоді наш код, що емулює відправлення даних, буде наступним:
А що робити якщо нам потрібно надіслати не лише текст із форми, а й відправити файл? Для цього в комірку масиву заносимо шлях до файлу, який потрібно відправити і перед ним ставимо знак @. Даний знак є директивою для CURL, що це шлях до файлу і, відповідно, передати його на заданий ресурс. Наш код перетвориться на такий вигляд:
Все начебто добре, але біда, ми формуємо самі цей файл у пам'яті, або ж отримуємо його звідкись. В цьому випадку не завжди зручно зберігати файл на диск, щоб CURL відправив його POST запитом на віддалений ресурс. Як бути тоді? Для вирішення цього завдання формуватимемо запит «вручну» формуючи тіло і заголовок самі.
Для зручності напишемо спочатку клас-контейнер, в якому буде вміст файлу та його параметри:
Цей клас необхідний, щоб у масиві для POST запиту, можна було ідентифікувати елементи містять файл. Потім напишемо універсальний клас, що формує multipart/form-data слідуючи RFC7478:
Цей клас обробить масив з елементами форми, і якщо зустрінеться серед елементів масиву клас — oFile, він сформує тіло POST запиту з урахуванням вимог «multipart/form-data» для складового типу вмісту.
Тепер наша програма виглядатиме так:
Ось так можна виконати наше завдання, пройшовши зайву ланку збереження на диск. Цим ми заощадимо пам'ять, час та ресурси.