PHP和OneNet平台交互

来源:互联网 发布:java打印功能代码 编辑:程序博客网 时间:2024/05/17 23:11

        此前,关于Microduino如何同OneNet平台交互我已经写了一个系列,想了解的可以点击此链接:http://blog.csdn.net/wobeatit/article/details/77985333进一步了解。关于使用PHP和OneNet平台的交互,实际上比硬件方面的交互要简单些,所以接下来的讲解会比较粗糙。

      上传数据

       首先附上上传数据的php源码,此段代码我主要使用curl函数来构造HTTP报文,与OneNET平台交互。

在这里应注意的是,curl函数需要在php.ini的配置文件中打开:

<?php//php post数据到onenet平台 $url = 'http://api.heclouds.com/devices/*****/datapoints?type=3';//*****处填写自己的设备ID号$header[]="api-key:************"; //填写自己的api-key号$content = "{\"a\":20}";//向OneNET发送的数据JSON格式function post($url, $header, $content){   $ch= curl_init();   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);//TRUE-->将curl_exec()获取的信息以字符串返回,而不是直接输出。   curl_setopt($ch, CURLOPT_URL, $url);   curl_setopt($ch, CURLOPT_HTTPHEADER, $header);  //启用时会将头文件的信息作为数据流输出   curl_setopt($ch, CURLOPT_POST, true);//启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样   curl_setopt($ch, CURLOPT_POSTFIELDS, $content);   if(curl_exec($ch) === false) //curl_error()返回当前会话最后一次错误的字符串       {             die("Curlerror: ".curl_error($ch));       }   $response= curl_exec($ch);//获取返回的文件流   curl_close($ch);   return $response;}$output = post($url,$header,$content);$output_array = json_decode($output,true);print_r($output_array); ?>

      再附上在之前的博客中提到的与OneNET平台交互的HTTP报文格式:

POST/devices/*****/datapoints?type=3HTTP/1.1

api-key:****************

Host:api.heclouds.com

Connection:close 

Content-Length:23

{“a”:20}

  对比可发现,使用curl函数表示HTTP报文时,实际上就是拼接出了HTTP报文形式。


    获取数据

   从OneNet获取数据,实际上要比发送数据代码编写更为简单,先附上源码:

<?php$header[]="api-key:*********";//此处写成自己的API-KEY值$url="http://api.heclouds.com/devices/******/datastreams/**";/*获取数据流为**的数据值,注意此处设备ID号以及申请获取的数据流ID号都应根据自己的OneNet平台设备ID号,希望获取的数据流ID号进行更改*/ //用于获取从OneNet平台返还的数据function get($url, $header){       //1.初始化,创建一个新cURL资源       $ch=curl_init();       //2.设置URL和相应的选项       curl_setopt($ch,CURLOPT_URL,$url);//需要获取的URL地址,也可以在curl_init()函数中设置       curl_setopt($ch,CURLOPT_HTTPHEADER,$header);//启用时会将头文件的信息作为数据流输出       curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//将curl_exec()获取的信息以字符串返回,而不是直接输出。       curl_setopt($ch,CURLOPT_HEADER,0);//启用时会将头文件的信息作为数据流输出。       if(curl_exec($ch)=== false) //curl_error()返回当前会话最后一次错误的字符串       {             die("Curlerror: ".curl_error($ch));       }       $response =curl_exec($ch);//获取返回的文件流    curl_close($ch);    return $response;}$output=get($url,$header);$output_array=json_decode($output,true);print_r($output_array);/*print_r($output_array["data"]["update_at"]);print_r($output_array["data"]["current_value"]);*/?>

贴上之前博客中提到的向OneNet平台发送数据的完整HTTP报文格式:

GET/devices/***/ datastreams/aHTTP/1.1

api-key:*************

Host:api.heclouds.com

Connection:close

    可以发现php实现获取数据其实是同发送数据一样,利用curl函数实现了获取数据的HTTP请求报文的拼接。