1

JSON形式のlibcurlを使用してHTTPgetリクエストを送信する方法はありますか?

私の現在のリクエストは

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

libcurlを使用します。カールと同等です

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コードを知りたいです。ありがとう。

4

2 に答える 2

2

CURLOPT_POSTFIELDSを使用する必要があります

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

-dオプションはPOSTメソッドに使用されます。カールマンページから

-d、--dataPOSTリクエストで指定されたデータを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)
于 2012-11-05T18:50:37.137 に答える
1

カリヤンのアドバイスに従って、これが最終的なコードです。これを投稿して完成させます。

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;
    }
}
于 2012-11-06T14:13:59.273 に答える