有没有办法使用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代码。感谢。
答案 0 :(得分:2)
你应该使用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(?)形成您的网址,以便将您的json数据放入查询字符串本身。
query_string = "q=" + json_encoded_to_str
curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost:9200/_search?" + query_string)
答案 1 :(得分:0)
按照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;
}
}