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

来源:互联网 发布:xy苹果手机助手mac版 编辑:程序博客网 时间:2024/05/21 13:07

JSON是类似于xml的一种用于信息交互的轻量级信息定义格式,可扩展性也很好。

如何用C++写的代码来发送http请求,消息格式采用JSON呢?

下面我一步一步介绍。所有步骤都经实际验证,测试平台为WIN7系统。

  1. 发送http请求需要安装curl库。vs2010下编译libcurl
  2. 需要构造和解析json格式的消息要用到jsoncpp库。vs2010下编译jsoncpp库
  3. 测试代码如下:
#include <stdio.h>#include <string.h>#include <curl/curl.h>#include <json/json.h>#define MAX_BUF      65536char 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, "https://api.weibo.com/2/statuses/public_timeline.json" );        //准备构造json格式消息        Json::Value value;        value["id"]=Json::Value(5345);        Json::Reader reader;        std::string strResult = value.toStyledString();        Json::Value result;        //测试构造字符串内容        if (reader.parse(strResult,result))        {                if(!result["id"].isNull())                {                        //std::cout<<result["id"].asInt()<<std::endl;                }        }        std::cout<<value.toStyledString().c_str()<<std::endl;         //设置http请求json格式参数        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, value.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;}


0 0
原创粉丝点击