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

原创 2016年01月25日 23:24:38

整个文章从我学校的论坛转载:http://www.cqutlab.cn/thread-116-1-1.html  这里是复制粘贴的,可能有些有错误。。


既刚才我用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 为下一次做准备

整个流程结束





下面紧接着来一个提交带参数的例程
同样给出webservice里面POST的方法

图1
然后给出我网站后台怎么调用这个方法的
  [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,当然还包含其他<>的标签内容。这个时候,单片机也要做相应的解析






  









808 协议的解析

7e0200003f000004021895000b00000000000400030158ccaa06cb79f5009500000000160105165415010400006974020200...
  • mz454619501
  • mz454619501
  • 2016年01月06日 17:12
  • 4821

java解析JT808协议

JT808协议扫描 1 数据类型 2 消息结构 3 消息头 解析 1 消息体实体类 2 字节数组到消息体实体类的转换 21 消息转换器 22 用到的工具类 221 BCD操作工具类 222 位操作工具...
  • hylexus
  • hylexus
  • 2017年02月11日 21:48
  • 7074

SIM900A 实现HTTP GET,带参数的POST请求

GET 的请求: AT+HTTPTERM AT+CSQ AT+CGATT? AT+SAPBR=3,1,"CONTYPE","GPRS" AT+SAPBR=1,1 AT+HTTPINIT AT+HT...
  • PZ0605
  • PZ0605
  • 2017年02月20日 14:02
  • 2432

使用GPRS模块SIM900A通过HTTP上传数据到云服务器的方法

最近在做一个24小时在户外机柜不停工作的产品。想随时查询测试数据,在设计过程中就在内部集成了SIM900A。这样就可以实时上传数据了。 服务器用的是新浪云,在上传数据的时候我采取了一种非常简单并取...
  • sunzhen_222
  • sunzhen_222
  • 2015年03月21日 00:45
  • 8077

关于 SIM900A访问HTTP的方法总结

某天突然想,SIM900A能不能访问网页呢?如果能,直接把数据通过网页提交上去不就更简单了嘛。 于是乎,果断咨询淘宝卖家,得到的答复是“亲~ 理论上可行,但是没测试过哦”。 好吧,那只能百度了。不...
  • qq_15079039
  • qq_15079039
  • 2017年08月11日 14:52
  • 694

SIM900A访问HTTP的简单方法

SIM900A访问HTTP的简单方法
  • GOGOmusic
  • GOGOmusic
  • 2016年11月03日 11:58
  • 1574

sim808基站定位

sim808是带基站定位功能的,可通过AT指令获取附近小区信息,然后根据数据库转化成经纬度信息,即可完成辅助定位功能,测试流程如下: AT+CGATT? +CGATT: 1 ...
  • gyb510
  • gyb510
  • 2016年07月27日 14:19
  • 2190

sim808 gps 定位数据解析

AT+CGNSPWR=1 //打开GPS电源 正常返回“OK” AT+CGNSPWR=0 //关闭GPS电源   2、AT+CGNSSEQ="RMC"//定义NMEA解析 返回: “O...
  • jinchengzhou
  • jinchengzhou
  • 2016年11月05日 15:34
  • 4042

SIM808开发手册

  • 2015年05月11日 19:55
  • 19.54MB
  • 下载

Zigbee+SIM900A 通过http协议实现上传数据到云服务器

本文主要讲述 Zigbee 与 SIM900A 通过HTTP协议将数据上传至云服务器上,如果需要了解Arduino和SIM900A的相关操作请看  http://blog.csdn.net/uyy20...
  • uyy203
  • uyy203
  • 2017年02月13日 01:37
  • 1339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SIM808 执行HTTP POST 例程【全网首发】
举报原因:
原因补充:

(最多只允许输入30个字)