libcurl, включающий кодирование чанка с данными из нескольких частей

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

Для достижения этого я использовал CURLOPT_HTTPOST и установите заголовок Transfer-Encoding: chunkedПроблема в том, что я не уверен, использует ли libcurl кодировку chunked вообще. В моих попытках выяснить, я установил CURLOPT_VERBOSE в 1 и реализовал пользовательский отладочный обратный вызов для мониторинга заголовков http. Из скручивания я вижу только 1 HTTP-запрос и только 1 HTTP-ответ (код 200). Я не видел никаких ответов http code 201.

У меня вопрос, как включить чанк-кодирование для загрузки файлов в составных POST-запросах? Если то, что я делаю, правильно, почему libcurl не показывает мне все запросы, как мне убедиться, что он работает так, как требуется?

Ниже приведен короткий пример того, что я делаю в коде.

//Assume `curl` has been initialised
struct curl_httppost *formpost=NULL;
struct curl_httppost *lastptr=NULL;
struct curl_slist *headerlist=NULL;

curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME,
"foo",
CURLFORM_COPYCONTENTS,
"bar",
CURLFORM_END);

curl_formadd(&formpost,
&lastptr,
CURLFORM_COPYNAME,
"file",
CURLFORM_FILE,
"filepath",
CURLFORM_FILENAME,
"filename",
CURLFORM_END);

headerlist = curl_slist_append(headerlist, "Transfer-Encoding: chunked");

curl_easy_setopt(curl, CURLOPT_URL, "https://foo/uploadfile");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curl_write_to_string);
curl_easy_setopt(curl, CURLOPT_XFERINFOFUNCTION, curl_progress_cb);
curl_easy_setopt(curl, CURLOPT_XFERINFODATA, &progress_id);
curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1);CURLcode res = curl_easy_perform(curl);

заранее спасибо

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …