使用CURL和C将JSON POST到url

时间:2014-04-12 18:21:29

标签: c json bash curl libcurl

我正在使用以下命令将JSON数据发送到来自bash的网址:

$ curl -v -d '{xxx:200}&apikey=xxxxx' -X POST http://localhost/xxxx/input/post.json -H "Accept: application/json" -H "Content-Type:application/json"

在C中使用以下内容:

int main(void)
{
CURL *easyhandle; 

curl_global_init(CURL_GLOBAL_ALL);
easyhandle = curl_easy_init();

if(easyhandle) {
char *data="json={xxx:200}&apikey=xxxxx";   
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data);   
curl_easy_setopt(easyhandle, CURLOPT_URL, "http://localhost/xxxx/input/post.json");
curl_easy_perform(easyhandle); 


curl_easy_cleanup (easyhandle);
}

curl_global_cleanup();

return 0;
}

这就是我想要实现的目标:

http://localhost/xxxx/input/post.json?json={xxx:200}&apikey=xxxxx

它似乎不起作用。 :( 我是一个完全新手卷曲。请帮忙。

谢谢!

2 个答案:

答案 0 :(得分:1)

幸运的是,我发送数据的服务器处理了POST和GET请求,因此有问题的代码就足够了。

具有类似问题的其他人可以使用简单的解决方法(如果您的代码没有实时约束并且不是性能密集型的)。您可以使用C中的system()来分叉bash进程。这可以避免编码的麻烦。

答案 1 :(得分:-1)

您尝试执行的操作不是执行POST请求,而是执行GET请求。但是,我不确定这是一个好主意,因为GET参数的长度有限(大约2 kB左右),而且 - 正如其他人已经提到的那样 - 它们需要进行编码和解码以及所有时髦的东西这是颈部疼痛。

指向localhost的URL表明您可以控制服务器代码。如果您使用POST参数而不是GET参数,则可以按原样使用当前代码(它设置请求的POST主体,这可能是正确的 - 所以您不必更改客户端代码,您只需要更改服务器代码。)