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

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);
}

 

转载于:https://my.oschina.net/u/3152070/blog/910963

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值