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

这段时间在做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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值