Моя программа 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 (около 3 КБ) находятся в буфере в оперативной памяти, прежде чем мне нужно будет их опубликовать. Я ожидал использовать libcurl CURLOPT_READFUNCTION
для буферизации буфера для libcurl (но я открыт для альтернатив) и CURLOPT_WRITEFUNCTION
для захвата ответа сервера, подобно тому, как я читал ответ из popen pipe.
Все это кажется простым. Что сбивает с толку, так это какая комбинация CURLOPT_POST
, CURLOPT_HTTPPOST
, CURLOPT_POSTFIELDS
, CURLOPT_HTTPHEADER
мне нужна. Я прочитал много сообщений на эту тему (не каламбур), и ни один точно не соответствует моему сценарию. Есть предложения?
[Обратите внимание, что обычно у меня нет полей формы в кодировке URL, например: http://server/handler.php?I=do¬=use&these=in&my=query
]