ROS下使用CURL与服务器数据交换

来源:互联网 发布:大数据建设 编辑:程序博客网 时间:2024/06/05 18:31

这段时间在做linux下的信息收集并与服务器进行数据交换,经过两个多星期的学习终于初步解决了这个问题.

callback function

static size_t write_callback(void *ptr, size_t size, size_t nmemb, void *stream){    size_t written = fwrite(ptr, size, nmemb, (FILE *)stream);    return written;}

read from json file

#define PATH_FILE "/home/aq/test.json"void ReadJsonMsg(){       using namespace std;    Json::Reader reader;    Json::Value root;    ifstream ifs;    ifs.open(PATH_FILE, ios::binary);    if(reader.parse(ifs,root))    {        string message = root["message"].asString();        int success = root["success"].asInt();        cout << "Whether success :" << success << endl <<endl;        cout << "The output of return message is :" << message << "" << endl <<endl;        cout << "Reading Complete!" << endl;    }    ifs.close();}

main function

int main(int argc, char *argv[])   {      using namespace std;    ros::init(argc,argv,"json_ros");        //define the json value     Json::Value root;    root["call"] = Json::Value("1");    Json::FastWriter fw;    std::string number=fw.write(root);    int number_size = number.length();    char JsonData[number_size];    //set JsonData to 0.    memset(JsonData, 0, sizeof(JsonData));    strcpy(JsonData,number.c_str());         CURL *curl;    CURLcode res;    curl_global_init(CURL_GLOBAL_ALL);    curl = curl_easy_init();    if (curl)     {        //data exchanged        curl_easy_setopt(curl, CURLOPT_URL, "http://");        struct curl_slist *headers = NULL;        headers = curl_slist_append(headers, "Accept:application/json");        headers = curl_slist_append(headers, "Content-Type:application/x-www-form-urlencoded");        headers = curl_slist_append(headers, "charset:utf-8");        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "JsonData");        FILE *pagefile;        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);        fopen(PATH_FILE, "wb+");        if (pagefile)         {            curl_easy_setopt(curl, CURLOPT_WRITEDATA, pagefile);                   res = curl_easy_perform(curl);            if (res != CURLE_OK)            {                fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));            }            fclose(pagefile);        }        curl_easy_cleanup(curl);    }    curl_global_cleanup();    ReadJsonMsg();}
0 0
原创粉丝点击