【发布时间】:2012-01-05 06:49:25
【问题描述】:
我的 C++ 程序当前通过管道 (popen("curl ...")) 调用 curl 以将 JSON 数据文件 POST 到 Web 服务器。由于需要将 JSON 保存到文件并在子 shell 中调用 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)在我需要发布之前位于 RAM 中的缓冲区中。我期待使用 libcurl 的 CURLOPT_READFUNCTION 将缓冲区假脱机到 libcurl(但我对替代方案持开放态度),并使用 CURLOPT_WRITEFUNCTION 来捕获服务器的回复,类似于我从 popen 的管道中读取回复的方式。
这一切看起来都很简单。令人困惑的是我需要CURLOPT_POST、CURLOPT_HTTPPOST、CURLOPT_POSTFIELDS、CURLOPT_HTTPHEADER 的哪个组合。我已经阅读了很多关于这个主题的帖子(没有双关语),没有一个完全符合我的情况。有什么建议吗?
[请注意,我通常没有任何 URL 编码的表单字段,例如:http://server/handler.php?I=do&not=use&these=in&my=query]
【问题讨论】:
标签: json http post http-post libcurl