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

    xiaoxiao2025-05-25  8

         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 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, "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; }

    编译g++ http_test.cpp -o http_test -L/lib -ljson_linux-gcc-3.4.6_libmt -lcurl

    转载请注明原文地址: https://ju.6miu.com/read-1299265.html
    最新回复(0)