CURL POST заявка, съставнасъдържание (многочаст

заявка
Много често има въпрос за изпращане на POST заявка до отдалечен сървър. Нека да разгледаме по-отблизо как да направите това с помощта на библиотеката CURL. Най-лесният вариант е да емулирате изпращане на полета на формуляр INPUT. Да кажем, че имаме форма:

Тогава нашият код, който емулира изпращане на данни, ще бъде както следва:

Но какво ще стане, ако трябва да изпратим не само текста от формата, но и файла? За да направите това, въвеждаме пътя до файла, който ще бъде изпратен в клетката на масива, и поставяме знака „@“ пред него. Този знак е директива за CURL, че това е пътят до файла и съответно го прехвърля към посочения ресурс. Нашият код ще изглежда така:

Всичко изглежда наред, но проблемът е, че сами формираме този файл в паметта или го вземаме отнякъде. В този случай не винаги е удобно да запишете файла на диск, така че CURL да го изпрати с POST заявка до отдалечен ресурс. Как да бъде тогава? За да разрешим този проблем, ще формираме заявката "ръчно", като сами формираме тялото и заглавието.

За удобство нека първо напишем клас контейнер, който ще съдържа съдържанието на файла и неговите параметри:

Този клас е необходим, така че в масива за POST заявката да е възможно да се идентифицират елементите, съдържащи файла. След това ще напишем общ клас, който формира "multipart/form-data" след RFC7478:

Този клас ще обработи масив с елементи на формуляр и ако класът oFile бъде открит сред елементите на масива, той ще формира тялото на POST заявката, като вземе предвид изискванията за многостранни/формулярни данни за съставния тип съдържание.

Сега нашата програма ще изглежда така:

Ето как можем да изпълним задачата си, заобикаляйки допълнителната връзка за записване на диск. Това ще спести памет, време и ресурси.