重工电子论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 29104|回复: 11
打印 上一主题 下一主题

SIM808 执行HTTP POST 例程【全网首发】

[复制链接]

299

主题

684

帖子

6998

积分

学生管理组

Rank: 8Rank: 8

积分
6998
跳转到指定楼层
楼主
发表于 2016-1-23 23:14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 李维强-15级 于 2016-1-23 23:17 编辑

既刚才我用C写的POST例程,测试可以过后,又用了很多时间来研究这个SIM808怎么利用POST提交数据到我后台来。
首先选择需要post的网页,我这里是开的webservice,
以我的webservice为例,上面写清楚了提交的方法,当然这里只是个hello world示例

图1
然后在SIM808输入一下截图的指令(这里千万记住,实际情况是需要轮询的机制,保持数据网络的畅通,一旦检测到网络不畅通,就要视图重新连接数据网络,战舰的sim900里面有例程讲怎么建立轮询保护机制)

图2

然后执行以下流程 串口给808发AT指令,下图3中 蓝色是808的返回值,切记一定要等它返回OK,自己在程序里面做判断,一旦不返回OK,那么就要有个轮询机制,继续发送设置,判断到多次不行,就要发送AT+HTTPTERM 关闭HTTP 再来,不然就会出错哦

图3

根据图3的流程,我们来做,但是实际流程情况和图3有时候有点出入
例如如果已经执行了AT+HTTPINIT  那么它会返回ERROR,这个时候有两种方式,一种就是去使用AT+HTTPSTATUS=?去查当前的状态,另外一个就是使用AT+HTTPTERM把HTTP关一下再开。总之不行了就关下,再开

下面给SIM808设置我WEBSERVICE的地址 根据图1,给出的POST相对地址,我们给它组合成绝对地址:“http://125.83.116.37/WebService1.asmx/HelloWorld”(双引号以内的内容)
然后写入sim的URL里面
  

下图4就是给出关了再开,然后执行整个设置的过程
其中URL使用:  AT+HTTPPARA="URL","http://125.83.116.37/WebService1.asmx/HelloWorld"  这个是根据webservice的方法组合起来的
根据webservice的要求,还需要设置:AT+HTTPPARA="CONTENT","application/x-www-form-urlencoded"  
由于从方法上面来看,这个返回helloworld的例子没有数据内容(参数),所以 设置就这样了

然后串口发送: AT+HTTPACTION=1  ,其中1就是POST方式。发送过后,808会马上回复OK,但是由于由于网络延迟等,下面那个  +HTTPACTION: 1,200,96   才是从服务器返回的值,所以这里单片机要做个延迟处理,建议等30秒,不行就宣告失败,关闭连接。其中1是表示POST方式,200代表这次访问成功,(只有看到200才行啊,其他的都是错的。具体哪个值对应哪个,可以看808手册AT+HTTPACTION命令)。96表示返回96个字节

然后串口发送 : AT+HTTPREAD=1,96  表示从第1个字节读取,一直读到96个字节 ,读取刚才POST过后 ,服务器返回给808的数据,从这个里面我看到 服务器返回Hello world了
最后执行:AT+HTTPTERM   关闭HTTP 为下一次做准备

整个流程结束











分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

299

主题

684

帖子

6998

积分

学生管理组

Rank: 8Rank: 8

积分
6998
沙发
 楼主| 发表于 2016-1-23 23:41:27 | 只看该作者
下面紧接着来一个提交带参数的例程
同样给出webservice里面POST的方法

图1
然后给出我网站后台怎么调用这个方法的
[C#] syntaxhighlighter_viewsource syntaxhighlighter_copycode
        [WebMethod]
        public string userLogin(string loginName, string password)
        {
            //password为loginName与实际的password一起加密后的值
            string key = MD5.CurKey();
            password = MD5.EncryptString(loginName + password, key);
            string[] prototype = new string[] { "operatorID", "loginName", "name", "disabled", "role", "companyID" };
            List<Dictionary<string, object>> list = basedao.findMapByProperties("T_P_Operator", prototype, "loginName='" + loginName + "' and password = '" + password + "'");
            if (list.Count == 0)
            {
                return "0";//用户名或者密码错误
            }
            else
            {
                if (Int32.Parse(list[0]["disabled"] + "") == 1)
                {


                    return "1";//登录成功
                }
                else
                {
                    return "2";//用户被禁用
                }
            }


看到了吧 ,只要输入用户名密码正确,就返回1,否则返回0,
下面给出一个用户名:23123  ,密码:  123456 ,的用户,用808试返回值
这个就涉及到发送数据了
我们根据本楼的图1 构造数据”loginName=23123&password=123456“  ,这就是我们要向服务器提交的字符,这个加上末尾的“\r\n",有33个字节  
其中AT+HTTPDATA=0,1000  意思就是把现在缓存区里面的东西先清空
然后AT+HTTPDATA=33,20000  ,意思是需要填入缓冲器33个字节(这个就要每次提交的时候算一下了),并且最大在20秒内结束填充,当然你在变成的时候,9600的波特率,1000个字节内,后面那个写成2000足够了,因为这个808会检测,当你提交到33个字节后,会自动完成提交,不管时间到没到,都会显示OK。并且这个提交完了只会显示OK,不会回显你提交的内容。
为了保险,我们用AT+HTTPREAD 来看看刚才在缓冲区里面提交的什么,最后同样的调用AT+HTTPACTION=1 来POST
(细心的同学会发现,在webservice要求里面 不是要求要有Content-Length: length,这个length参数么?我之前写的C语言提交版本确实要这个参数,但是这个808里面不必管它,它会自动算出,并且提交,所以提交的DATA里面也不用写这一行)

同样 POST过后 单片机要写等待机制,等服务器返回信息  同样的 一定要等到返回200 才算正确啊
最后用AT+HTTPREAD来查看服务器返回的信息    我们可以看到确实返回了个1,当然还包含其他<>的标签内容。这个时候,单片机也要做相应的解析






  


回复 支持 反对

使用道具 举报

299

主题

684

帖子

6998

积分

学生管理组

Rank: 8Rank: 8

积分
6998
板凳
 楼主| 发表于 2016-1-23 23:43:07 | 只看该作者
本帖最后由 李维强-15级 于 2016-1-23 23:48 编辑

发一下我实验的参数和PDF资料,焦排你照着这个试哦

SIM808_HTTP 应用.rar (3.99 MB, 下载次数: 227)
参数

AT+SAPBR=3,1,"Contype","GPRS"
AT+SAPBR=3,1,"APN","CMNET"
AT+SAPBR=1,1
AT+SAPBR=2,1
AT+SAPBR=0,1

AT+HTTPTERM


AT+HTTPINIT


AT+HTTPPARA="CID",1
AT+HTTPPARA="URL","http://125.83.116.37/WebService1.asmx/userLogin"

AT+HTTPPARA?
AT+HTTPDATA=0,1000

loginName=23123&password=123456
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
地板
发表于 2016-1-25 09:40:32 | 只看该作者
觉得会搞电子又会搞网页的好强大。。SIM808集成了GPRS、GPS、蓝牙(部分芯片有)三合一的功能,如果只用gprs的话,可以考虑SIM900或者SIM900A啊,节约成本
回复 支持 反对

使用道具 举报

299

主题

684

帖子

6998

积分

学生管理组

Rank: 8Rank: 8

积分
6998
5#
 楼主| 发表于 2016-1-25 23:17:28 | 只看该作者
张金权-11级电子 发表于 2016-1-25 09:40
觉得会搞电子又会搞网页的好强大。。SIM808集成了GPRS、GPS、蓝牙(部分芯片有)三合一的功能,如果只用gpr ...

900那东西不是停产了么? 我还想节约点啊
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
6#
发表于 2016-1-26 09:34:51 | 只看该作者
本帖最后由 张金权-11级电子 于 2016-1-26 09:35 编辑

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~                       
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
7#
发表于 2016-1-26 09:35:20 | 只看该作者
李维强-15级 发表于 2016-1-25 23:17
900那东西不是停产了么? 我还想节约点啊

那还有900A,800呢,功能上跟900都一样
回复 支持 反对

使用道具 举报

299

主题

684

帖子

6998

积分

学生管理组

Rank: 8Rank: 8

积分
6998
8#
 楼主| 发表于 2016-1-30 00:09:26 | 只看该作者
张金权-11级电子 发表于 2016-1-26 09:35
那还有900A,800呢,功能上跟900都一样

你确定?要不帮我落实下,问下到底是怎么回事 我只需要GPRS,GPS,HTTP
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
9#
发表于 2016-1-30 09:36:18 | 只看该作者
李维强-15级 发表于 2016-1-30 00:09
你确定?要不帮我落实下,问下到底是怎么回事 我只需要GPRS,GPS,HTTP

需要GPS,那还是808吧
回复 支持 反对

使用道具 举报

12

主题

66

帖子

538

积分

高级会员

Rank: 4

积分
538
QQ
10#
发表于 2016-9-6 18:25:52 | 只看该作者
师兄有没有测试过SIM808发送数据的时候每包最大可以发送多少字节
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|cqutlab ( 渝ICP备15004556号

GMT+8, 2024-12-22 10:56 , Processed in 0.191667 second(s), 31 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表