搜索
简帛阁>技术文章>libcurl进行HTTP GET获取解析JSON数据

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\n", 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},
……
]
功能在Mac下,利用libcurl进行HTTPGET操作,循环获取json数据解析。依赖库boostlibcurl代码include<curl/curlh>include<cu
接口释义使用libcurl实现http通信——get获取response代码实现size_tresponseStr(void*ptr,size_tsize,size_tnmemb,void*userd
因项目的需要,PHP调用第三方Java/Net写好的RestfulApi,其中有些接口,需要在发送POST请求时,传入对象。Http中传输对象,最好的表现形式莫过于JSON字符串了,但是作为参数的接收
__author__'USER'encoding:UTF8importrequests,jsonfromxmletreeimportElementTreedefprint_node(node):'''
现在很多公司都是将数据返回一个json,而且很多第三方接口都是返回json数据,而且还需要使用到http协议,http协议是属于为加密的协议,而https协议需要SSL证书,https是将用户返回的信
httpparser介绍:1解析字节类型的httphttps请求数据:2支持已kv形式修改请求数据:3支持重新编码请求数据源码importjson__author"ling"defparser(re
Android的官网中提供了用于解析json数据的JSONObject和JSONArray对象,其中JSONOject用于解析json对象;JSONArray用于解析JSON数组,实列:packag
HTTP的方法有几种在文章HTTP入门里说到了有6种,我们这里讨论最常见的GETPOSTHTTP的方法Get和Post的区别我们讨论到Get方法和Post的区别时,大部分搜索给出的答案都是Get的参
$chcurl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_HEADER,array('Contenttype:a
JSON是一种比较方便的数据形式,下面使用$getJSON方法,实现获得JSON数据解析,都挺方便简单的。从http://apiflickrcom/services/feeds/photos_pu