libcurl进行HTTP GET获取解析JSON数据
功能
在Mac下,利用libcurl库进行HTTP GET操作,循环获取json数据并解析。依赖库
boost
libcurl
- 代码
#include <curl/curl.h>
#include <curl/easy.h>
#include <curl/curlbuild.h>
#include <sstream>
#include <iostream>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/json_parser.hpp>
#include <boost/foreach.hpp>
#include <string>
#include <ctime>
#ifdef _WINDOWS
#include <windows.h>
#else
#include <unistd.h>
#define Sleep(x) usleep((x)*1000)
#endif
using namespace std;
using namespace boost::property_tree;
size_t write_data(void *ptr, size_t size, size_t nmemb, void *stream) {
string data((const char*) ptr, (size_t) size * nmemb);
*((stringstream*) stream) << data << endl;
return size * nmemb;
}
int main(int argc, char *argv[])
{
while(true)
{
// 基于当前系统的当前日期/时间
time_t now = time(0);
char* dt = ctime(&now);
cout << dt << "-------------------------------------" << endl;
/*HTTP GET json data*/
std::stringstream out;
void* curl = curl_easy_init();
// 设置URL
curl_easy_setopt(curl, CURLOPT_URL, "http://172.21.1.121:4000/api/officeZone1/tempHum/allDevices/last");
// 设置接收数据的处理函数和存放变量
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &out);
// 执行HTTP GET操作
CURLcode res = curl_easy_perform(curl);
if (res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s
", curl_easy_strerror(res));
}
// 接受数据存放在out中,输出之
//cout << out.str() << endl;
string str_json = out.str();
curl_easy_cleanup(curl);
/*Parse json data*/
ptree pt; //define property_tree object
std::stringstream ss(str_json);
try {
read_json(ss, pt); //parse json
} catch (ptree_error & e) {
return 1;
}
ptree errortype = pt.get_child("");
for (boost::property_tree::ptree::iterator it = errortype.begin(); it != errortype.end(); ++it) {
std::cout << it->first;
std::cout << it->second.get<std::string>("id") << " "
<< it->second.get<std::string>("temperature") << " "
<< it->second.get<std::string>("humidity") << " "
<< std::endl;
}
Sleep(1000);
}
return 0;
}
- json数据格式
[{"id":115,"chipid":2956442,"date":"2017-03-30 14:06:44","timestamp":1490854004,"temperature":25,"humidity":40.9},
{"id":113,"chipid":2928629,"date":"2017-03-30 14:06:38","timestamp":1490853998,"temperature":24.5,"humidity":58.2},
{"id":112,"chipid":2943477,"date":"2017-03-30 14:07:02","timestamp":1490854022,"temperature":25,"humidity":42.6},
{"id":111,"chipid":2974582,"date":"2017-03-30 14:06:40","timestamp":1490854000,"temperature":24.2,"humidity":33.6},
……
]
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了