C++发送消息格式为JSON的http请求
来源:互联网 发布:dsd播放软件 编辑:程序博客网 时间:2024/05/21 17:03
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;