文档章节

PHP通过php_dio扩展控制SIM800 GPRS模块模拟HTTP POST提交表单

shukeiot
 shukeiot
发布于 2017/05/29 00:06
字数 474
阅读 127
收藏 0
function send_post($postdata) {
    //设置超时时间
    set_time_limit(0);

    //设置端口号
    $com_port = 3;

    //windows平台使用下面命令设置端口
    exec('mode COM'.$com_port.': baud=9600 data=8 stop=1 parity=n xon=on'); 
    //以读写不阻塞方式打开端口,
    $fd = dio_open('COM'.$com_port.':', O_RDWR|O_NONBLOCK);

    if(!$fd)
    {
        die('Error open COM'.$com_port.'.');
    }

    $url = 'http://www.shukeiot.cn/api';

    //汉字用urlencode编码
    $msg = urlencode('这里是汉字内容');

    $postdata = array(
        'uid' => '1',
        'msg' => $msg,
    );

    $poststr = http_build_query($postdata);
    $contentlength = strlen($poststr);

    //组装AT指令
    $at_command = array();
    //设置APN
    array_push($at_command, array('AT+SAPBR=3,1,"APN","UNINET"', 1));
    //打开网络连接
    array_push($at_command, array('AT+SAPBR=1,1', 1));
    //初始化HTTP
    array_push($at_command, array('AT+HTTPINIT', 1));
    //设置使用的连接,对应上面的AT+SAPBR的第二个参数
    array_push($at_command, array('AT+HTTPPARA="CID",1', 1));
    //设置HTTP URL参数
    array_push($at_command, array('AT+HTTPPARA="URL","'.$url.'"', 1));
    //设置HTTP CONTENT参数,Post表单:application/x-www-form-urlencoded
    array_push($at_command, array('AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded"', 1));
    //发送HTTP DATA,这里定义即将要发送的消息长度和超时时间
    array_push($at_command, array('AT+HTTPDATA='.$contentlength.',5000', 1));
    //回复DOWNLOAD的时候就可以写入POST请求字符串了
    array_push($at_command, array($poststr, 1));
    //正式提交请求,0是GET,1是POST,2是HEAD,这条指令有两条回复
    array_push($at_command, array('AT+HTTPACTION=1', 2));
    //关闭HTTP 连接
    array_push($at_command, array('AT+HTTPTERM', 1));
    //关闭网络
    array_push($at_command, array('AT+SAPBR=0,1', 1));

    //开始循环执行命令
    foreach ($at_command as $key => $value)
    {
        @dio_write($fd, $at_command[$key][0].chr(13));
        
        $num = 1;
        $datastr = '';

        //进循环读串口响应信息字节,每次一个
        while(true){
           $data = dio_read($fd, 1);
           $datastr .= $data;

            //用串口助手调试发现每次响应包含两个换行(chr(10))
            if($data == chr(10))
            {
               if($num % 2 == 0){
                    //输出响应
                    //echo '---'.$datastr.'---<br/>';
                    $datastr = '';
                }
                //AT+HTTPACTION=1有两个回复,指令接收回OK,完成请求以后会返回主机状态。601/302/200,一般200为正常响应
                if($num >= $at_command[$key][1]*2) break;
            $num ++;
            }
            //可以加入适当延时
            usleep(1000);
        }

    }

    dio_close($fd);
}

 

© 著作权归作者所有

shukeiot
粉丝 0
博文 9
码字总数 2508
作品 0
临沂
程序员
私信 提问
php://input , $_POST,$_GET

对一php://input介绍,PHP官方手册文档有一段话对它进行了很明确地概述。 php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTPRAWPOST_DATA......

长宁楚王陈涉
2016/06/04
53
0
PHP的"php://input"和$HTTP_RAW_POST_DATA 和$_POST的关系

最近一直在写接口,顺便把 php 输入输出流相关知识点学习了一遍 理论知识 php://input php://input 数据输入流存放着 post 请求发送过来的原生数据,但 Content-Type:multipart/form-data(...

big_cat
2015/11/28
233
0
AJAX POST请求中参数以form data和request payload形式在php中的获取方式

一.MINE TYPE问题: php对mime type为“application/x-www-form-urlencoded”(表单提交)和“multipart/form-data”(文件上传)的Post请求的数据作特殊处理 下面以“multipart/form-data”...

niluchen
2015/09/11
0
0
深入剖析PHP输入流 php://input

PHP输入流php://input在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$POST数组。所以,这里主要探讨php输入流php://input对于php://input介绍,PHP官方手册...

xuanskyer
2016/07/03
37
0
PHP输入流php://input

PHP输入流php://input 在使用xml-rpc的时候,server端获取client数据,主要是通过php输入流input,而不是$_POST数组。所以,这里主要探 讨php输入流php://input 对一php://input介绍,PHP官方...

等风1306
2014/08/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

线程池之ThreadPoolExecutor使用

ThreadPoolExecutor提供了四个构造方法: ThreadPoolExecutor构造方法.png 我们以最后一个构造方法(参数最多的那个),对其参数进行解释: public ThreadPoolExecutor(int corePoolSize, /...

天王盖地虎626
27分钟前
1
0
小程序登陆流程

http://www.bubuko.com/infodetail-2592845.html

为何不可1995
36分钟前
1
0
Consul+Spring boot的服务注册和服务注销

一图胜千言 先看一看要做事情,需要在Consul上面实现注册中心的功能,并以2个Spring boot项目分别作为生产者,消费者。 Consul 假设已经完成文章《Consul的开发者模式之Docker版》中的所有的...

亚林瓜子
42分钟前
4
0
MySQL高可用之基于Galera复制跨地域节点分布的滥用

mysql使用教程 MySQL高可用之基于Galera复制跨地域节点分布的滥用 2018-11-22 02:15 8335 85 让我们再一次讨论MySQL高可用性(HA)和同步复制。 它是地理上分布区域上一些高可用性参考架构解...

rootliu
52分钟前
1
0
js判断pc还是移动端

var pcyidong =/(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent); 如果pcyidong的值为false则用户的浏览器为pc端 如果pcyidong的值为true则用户浏览器为移动端 if (pcyidong =...

流年那么伤
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部