libcurl http以json格式获取请求

有没有办法使用JSON格式的libcurl发送HTTP get请求?

我目前的要求是

curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost:9200/_search?q=tag:warcraft")

使用libcurl。 它相当于curl

 curl -XGET http://localhost:9200/_all/tweet/_search?q=tag:warcraft 

我想使用libcurl发送以下curl请求(以json格式)。

 curl -XGET http://localhost:9200/_search -d '{ "query" : { "term" : { "tag": "warcraft" } } }' 

我想知道发送上述请求的等效libcurl代码。 谢谢。

你应该使用CURLOPT_POSTFIELDS

 curl_easy_setopt(curl, CURLOPT_POST, 1); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_data_encoded_as_string); 

-d选项用于POST方法。 来自curl手册页

-d, – data将POST请求中的指定数据发送到HTTP服务器

如果您需要发送更多不适合查询字符串的数据,则必须使用POST方法

http://en.wikipedia.org/wiki/POST_(HTTP)

作为GET请求的一部分,可以在URI的查询字符串中传递一些数据,指定搜索术语,日期范围或定义查询的其他信息。 作为POST请求的一部分,可以在请求消息正文中将任意类型的任意数量的数据发送到服务器。

如果您必须使用GET(?)形成您的URL,以便将您的json数据放入查询字符串本身。

 query_string = "q=" + json_encoded_to_str curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost:9200/_search?" + query_string) 

按照kalyan的建议,这是我最终得到的代码。 发布此内容以完成。

 int main() { CURL *curl_handle; CURLcode res; static const char *postthis="{\"query\":{\"term\":{\tag\":\"warcraft\"}}}"; curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); if(curl_handle) { curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost:9200/_search"); curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDS, postthis); curl_easy_setopt(curl_handle, CURLOPT_POSTFIELDSIZE, (long)strlen(postthis)); curl_easy_setopt(curl_handle, CURLOPT_WRITEHEADER, stdout); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, stdout); res = curl_easy_perform(curl_handle); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl_handle); return 0; } }