前端之家收集整理的这篇文章主要介绍了
jsoncpp和curl的使用,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#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;
}