Моя программа на C++ в настоящее время вызывает curl через трубу (popen("curl ...")
) для POST файла с данными JSON на веб-сервер. Это имеет очевидные ограничения производительности из-за необходимости сохранять JSON в файл и вызывать curl в подпрограмме. Я хотел бы переписать его для использования libcurl, но мне не ясно, как это сделать. Командная строка, которую я передаю в popen()
такова:
curl -s -S -D /dev/null -H "Content-Type: application/json" -X POST -d file-of-json http://server/handler.php
Данные JSON (около 3K) находятся в буфере в оперативной памяти до того, как мне нужно будет их опубликовать. Я ожидал использовать CURLOPT_READFUNCTION
для спула буфера в libcurl (но я открыт для альтернатив), и CURLOPT_WRITEFUNCTION
для захвата ответа сервера, аналогично тому, как я читаю ответ из трубы popen.
Все это кажется простым. Смущает только то, какая комбинация CURLOPT_POST
, CURLOPT_HTTPPOST
, CURLOPT_POSTFIELDS
, CURLOPT_HTTPHEADER
мне нужна. Я прочитал много сообщений на эту тему (без каламбура), и ни одно из них не соответствует моему сценарию. Есть предложения?
[Обратите внимание, что обычно у меня нет полей формы с URL-кодом, например: http://server/handler.php?I=do¬=use&these=in&my=query
]