jsoncpp和curl的使用

原创 2015年07月06日 22:42:21
#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;
}

相关文章推荐

ubuntu下Atom环境搭建:c++ & opencv & curl & jsoncpp

ubutntu系统,atom编辑器 配置opencv环境 配置curl环境 配置jsoncpp环境

qt4.8使用jsoncpp简单实例

  • 2017年10月12日 14:38
  • 57KB
  • 下载

jsoncpp的简单使用

  • 2016年06月14日 17:40
  • 903KB
  • 下载

VS2010中使用JSONCPP方法

下载jsoncpp后,按ReadMe文档的说法是要先安装的,但是安装比较麻烦。然而事实上,我们并不需要安装,就可以直接使用。 方法一:直接拷贝源文件。这个方法比较简单,但不推荐,因为不便于项目管理。...

JSONCPP使用-1

  • 2015年12月04日 11:24
  • 37KB
  • 下载

jsoncpp使用测试

  • 2012年12月12日 19:05
  • 42KB
  • 下载

Jsoncpp编程接口及使用方法简介

Jsoncpp编程接口 Jsoncpp是一个使用C++语言实现的面向对象的json库,以静态库的形式提供,使用非常简单。 Jsoncpp提供的接口中有3个核心类:Reader、Writer、Valu...

jsoncpp使用说明

  • 2013年10月29日 09:47
  • 211KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:jsoncpp和curl的使用
举报原因:
原因补充:

(最多只允许输入30个字)