libcurl — CURLOPT_MIMEPOST против CURLOPT_POSTFIELDS

c #http #curl #libcurl

#c #http #curl #libcurl

Вопрос:

Скажите, пожалуйста, в чем основное различие между вариантами CURLOPT_MIMEPOST и CURLOPT_POSTFIELDS ?

Что можно сделать с помощью CURLOPT_MIMEPOST — чего нельзя сделать с помощью CURLOPT_POSTFIELDS ?

Ответ №1:

CURLOPT_POSTFIELDS

Отправляет именно те байты, которые вы указываете в теле HTTP-запроса. С типом содержимого по умолчанию application/x-www-form-urlencoded . libcurl не будет добавлять или кодировать данные каким-либо образом для вас.

С помощью инструмента командной строки curl вы делаете это с -d помощью .

CURLOPT_MIMEPOST

Заставляет libcurl отправлять «составной formpost». Это поток данных, использующий формат, который позволяет отправителю отправлять на сервер несколько «частей» данных, каждая часть которых должным образом разделена и идентифицирована. Каждая часть имеет имя, содержимое и свой собственный набор заголовков. Когда HTTP-клиент «загружает файл», это почти всегда делается с использованием составных formposts.

Составной formpost — это структурированные данные в теле запроса, и этот параметр помогает создавать и отправлять этот формат. Приложение также может самостоятельно создавать этот формат, если оно предпочитает это, и предоставлять его с CURLOPT_POSTFIELDS помощью или даже с помощью обратного CURLOPT_READFUNCTION вызова .

С помощью инструмента командной строки curl вы делаете это с -F помощью .

Смотрите также

https://everything.curl.dev/libcurl-http/upload

Комментарии:

1. Спасибо, то есть curlopt_mimepost похож на частный случай CURLOPT_POSTFIELDS ? И я могу использовать CURLOPT_POSTFIELDS для реализации CURLOPT_MIMEPOSTis самостоятельно?

2. Да, именно. Позвольте мне немного расширить свой ответ, чтобы сделать это более понятным.