jsoncpp和curl的使用

#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#include <json/json.h>
#define MAX_BUF      65536
char wr_buf[MAX_BUF+1];
int  wr_index;
size_t write_data( void *buffer, size_t size, size_t nmemb, void *userp )
{
        int segsize = size * nmemb;
        if ( wr_index + segsize > MAX_BUF ) {
                *(int *)userp = 1;
                return 0;
        }
       
        memcpy( (void *)&wr_buf[wr_index], buffer, (size_t)segsize );
       
        wr_index += segsize;
       
        wr_buf[wr_index] = 0;
       
        return segsize;
}
int main( void )
{
        CURL *curl;
        CURLcode ret;
        int  wr_error;
        wr_error = 0;
        wr_index = 0;
       
        curl = curl_easy_init();
        if (!curl) {
                printf("couldn't init curl ");
                return 0;
        }
        //指定url
        curl_easy_setopt( curl, CURLOPT_URL, ".json" );
        //准备构造json格式消息
        Json::Value root;
		    //根节点属性
			 //子节点
    Json::Value partner;
			    //子节点属性
    partner["channel"] = Json::Value("123333");
    partner["secretKey"] = Json::Value("123");
    root["additional"] = Json::Value(partner);
	 
    root["serviceCode"] = Json::Value("so.g11111");
//   root["params"] = Json::Value("[""8554"," HAIXT" "]");
      root["params"].append("8711111");
      root["params"].append("H111");
//      root["achievement"].append("ach3");
   
 

 
    //子节点挂到根节点上
 //   root["partner"] = Json::Value(partner);

        Json::Reader reader;

        std::string strResult = root.toStyledString();
        Json::Value result;
        //测试构造字符串内容
        if (reader.parse(strResult,result))
        {
                if(!result["id"].isNull())
                {
                        //std::cout<<result["id"].asInt()<<std::endl;
                }
        }
        std::cout<<root.toStyledString().c_str()<<std::endl;
         //设置http请求json格式参数
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, root.toStyledString().c_str());
        curl_easy_setopt( curl, CURLOPT_WRITEDATA, (void *)&wr_error );
        curl_easy_setopt( curl, CURLOPT_WRITEFUNCTION, write_data );
       
        ret = curl_easy_perform( curl );
        printf( "ret = %d (write_error = %d) ", ret, wr_error );
       
        if ( ret == 0 ) printf( "%s ", wr_buf );
        curl_easy_cleanup( curl );
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flintlovesam

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值