PostFields
- это просто typedef
для cURLpp::OptionTrait<std::string, cURL::CURLOPT_POSTFIELDS>
, ниже я упрощаю.
Если вы внимательно прочитаете сообщения об ошибках, они точно скажут, чтонеправильный:
ошибка: не найдена соответствующая функция для вызова curlpp :: OptionTrait:: OptionTrait (станд :: __ cxx11 :: Список&) '
В сущности, это означает, что вы не можете передать std::list<std::string>
в конструктор PostFields
. В подробностях ошибки сообщается о 4 возможных конструкторах, ни один из которых не принимает std::list
в качестве ввода:
PostFields()
PostFields(const std::string&)
PostFields(const PostFields&)
PostFields(PostFields&&)
Действительно, если вы прочитаете документацию cURLpp , вы не сможетесоздать PostFields
из std::list
. Что имеет смысл, согласно документации cURL
для CURLOPT_POSTFIELDS
:
Передать символ * в качестве параметра, указывая на полные данные для отправкив операции HTTP POST. Вы должны убедиться, что данные отформатированы так, как вы хотите, чтобы сервер их получал. libcurl не будет преобразовывать или кодировать его для вас в любом случае. Например, веб-сервер может предполагать, что эти данные имеют URL-кодировку.
CURLOPT_POSTFIELDS
ожидает один char*
в качестве ввода (который cURLpp переносит с использованием std::string
), поэтому вы должны передать данные PUT
в виде одной строки в кодировке URL, каквы делаете в командной строке, например:
request.setOpt(new curlpp::Options::PostFields("symbol=EB&side=ri&quantity=3"));
Откуда у вас появилась идея, что вы можете использовать std::list
с PostFields
?
BTW, в соответствии сдокументация cURLpp, вам не нужно использовать new
при добавлении параметров к объекту curlpp::Easy
:
curlpp::Easy request;
request.setOpt(curlpp::Options::Url(url));
request.setOpt(curlpp::Options::UserPwd("abc"));
request.setOpt(curlpp::Options::CustomRequest("PUT"));
request.setOpt(curlpp::Options::PostFields("symbol=EB&side=ri&quantity=3"));