C++发送消息格式为JSON的http请求

JSON是类似于xml的一种用于信息交互的轻量级信息定义格式,可扩展性也很好。如何用C++写的代码来发送http请求,消息格式采用JSON呢?下面我一步一步介绍。所有步骤都经实际验证,测试平台为linux系统。

    1. 发送http请求需要安装curl库。这个库一般linux系统是自带的。自己可以在系统目录查看下即可。
    2. 需要构造和解析json格式的消息要用到jsoncpp库,需要下载,我用的是 jsoncpp-src-0.5.0.tar.gz这个版本, 安装jsoncpp 库需要用到scons,所以需要预先安装scons。我下载的 scons-2.0.1.tar.gz这个版本。
    3. 执行tar -zxf scons-2.0.1.tar.gz 解压 scons-2.0.1.tar.gz后, 进入 scons-2.0.1文件夹,执行python setup.py install 即可完成编译安装。

    4. 安装好了scons后,执行tar -zxvf jsoncpp-src-0.5.0.tar.gz 解压。让后进入jsoncpp-src-0.5.0目录,执行scons platform=linux-gcc 完成编译。然后拷贝mv ~/jsoncpp-src-0.5.0/libs/linux-gcc-3.4.6/libjson_linux-gcc-3.4.6_libmt.so /lib/   拷贝 mv ~/jsoncpp-src-0.5.0/include/json /usr/include -r完成json安装。

    5. 测试代码如下:

 

#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#include <json/json.h>
#define MAX_BUF      65536*128
char wr_buf[MAX_BUF+1];
char nwr_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, "https://api.weibo.com/2/statuses/public_timeline.json" );
	curl_easy_setopt( curl, CURLOPT_URL, "http://www.solardrv.cn/api/chitic/appAllDeviceInstance?plantSn=zjhzcxx10mwgf" );
        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) \n", ret, wr_error );
       
//        if ( ret == 0 ) printf( "%s ", wr_buf );
	
	//解析json串

	Json::Reader reader;
	Json::Value root;
	if(reader.parse(wr_buf,root))
	{
		std::cout<<"parse success\n";
		int size = root.size();
		std::cout<<"root.size="<<size<<std::endl;
		int i = 0;
		Json::Value val_first = root[i];
		std::string code = val_first["result"].asString();
		int fsize = val_first.size();
		std::cout<<"result:"<<code<<"\tfsize="<<fsize<<std::endl;
		
		
	}
	else
	{
		std::cout<<"parse error\n";
	}


        curl_easy_cleanup( curl );s
        return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值