HTTP使用流程

AT+HTTPCREATE="http://iot.10086.cn/" 创建 http 实例,可指定 URL,除 HTTP 标识和域名外,其他 URL 部分将被忽略 +HTTPCREATE:0 模组返回 httpclient id:0 OK AT+HTTPHEADER=0,"User-Agent: Unkown\r\nConnection: close\r\n" 配置 HTTP 头部,注意 HTTP 协议规定 每个头部字段之间有回车换行分隔,部分 HTTP 服务器要求配置 User-Agent 字段,不然会拒绝响应 OK AT+HTTPSEND=0,0,"/page/index/name/culture" 发送 GET (method 参数为 0)请求包,URL 资源绝对 路径“/page/index/name/culture” OK 模组收到发送请求 CONNECT OK 连接服务器成功 +HTTPNMIH:0,0,313 服务器响应头部信息 Server: nginx Date: Sun, 10 Jun 2018 02:54:38 GMT Content-Type: text/html; charset=utf-8 Transfer-Encoding: chunked 本次传输为 chunked 模式,服务器数据将分片传输,不指定 Content-Length Connection: close Set-Cookie: PHPSESSID=7it2op5gurarvshrvf3j29kpr1; path=/; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Pragma: no-cache Cache-control: private X-Powered-By: ThinkPHP +HTTPNMIC:0,1,7960,1122,1122 服务器响应内容字段,首包数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="/Public/Img/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <meta name="format-detection" content="telephone=no"> <meta name="robots" content="all" /> …… +HTTPNMIC:0,1,7960,2582,1460 服务器响应第二包数据 <meta name="keywords" content=" +HTTPNMIC:0,1,7960,4042,1460 下一包数据 ass="navbar-header"> <button type="button"> <span>Toggle navigation</span> <span></sp +HTTPNMIC:0,1,7960,4042,1460 下一包数据 <div> <button type="button"> <span>Togg …… …… +HTTPNMIC:0,1,36632,36632,502 另外一包数据 <script type="text/javascript"> document.onkeydown=function(event){ var e = event || window.event || arguments.callee.caller.arguments[0]; if(e && e.keyCode==13 &&$("#fb_pass").focus()){ // enter 閿? go_group(); } }; …… $(".btn-close").click(function(){ }); </script> window.history.back(-1); $(".fill").hide(); +HTTPNMIC:0,0,37539,37539,0 最后一包数据,chunked 传输结束 AT+HTTPHEADER=0,"User-Agent: Unkown\r\nConnection: close\r\n" OK AT+HTTPSEND=0,0,"/Public/Home/assets/image/chiMod_icon1.png" 访问另一资源 OK +HTTPNMIH:0,0,209 Server: nginx Date: Sun, 10 Jun 2018 03:16:55 GMT Content-Type: image/png Content-Length: 7862 本次传输为非 chunked 模式,content 长度 7862Bytes Last-Modified: Thu, 29 Mar 2018 06:27:39 GMT Connection: close ETag: "5abc875b-1eb6" Accept-Ranges: bytes +HTTPNMIC:0,1,7862,1460,1460 第一包数据 …… HTTPNMIC:0,0,7862,7862,562 最后一包数据 …… AT+HTTPSEND=0,0,"/Public/Home/assets/image/chiMod_icon11.png" 访问不存在的资源 OK +HTTPERR:0,404 +HTTPERR 提示 404 Not Found 提示 404 Not Found +HTTPNMIH:0,0,139 服务器头部信息 Server: nginx Date: Sun, 10 Jun 2018 03:36:54 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: close +HTTPNMIC:0,0,0,0,0 content 字段为空 AT+HTTPCLOSE=0 使用完毕关闭 HTTP 实例,释放相关资源 OK **注意**:如果模组接收数据时出现+HTTPDROP:0,1460 上报,说明模组接收缓冲区满引起数据 drop,数据丢失后将出现后续接收过程解析错误,请检测当前是否波特率较低影响数据交互,如 M5310-A 使用+NATSPEED 将波特率调高至 115200 或 230400(波特率高于 9600 会自动禁止模组进入PSM),HTTP 功能使用完毕之后调回较低波特率以恢复使能 PSM 的状态. ### 2.1 POST 数据 AT+HTTPCREATE="http://iot.10086.cn/" 创建 http 实例 +HTTPCREATE:0 模组返回 httpclient id:0 OK AT+HTTPHEADER=0,"Connection: keep-alive\r\nAccept: */*\r\nOrigin: http://iot.10086.cn\r\nX-Requested-With: XMLHttpRequest\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36\r\nContent-Type: application/x-www-form-urlencoded; charset=UTF- 8\r\nReferer: http://iot.10086.cn/cooperation/index/cid/174\r\nAccept-Encoding: gzip, deflate\r\nAccept-Language: zh- CN,zh;q=0.9\r\n" 配置发送 HTTP header 信息 OK AT+HTTPCONTENT=0,"num=1&type=1&info=%E5%8F%B3%E4%BE%A7-%E8%81%94%E7%B3%BB%E6%88 %91%E4%BB%AC" 配置发送 HTTP content 信息 OK AT+HTTPSEND=0,1,"/Commom/buried_point" 发送POST (method 参数为 1)请求包,URL 资源绝 对路径“/Commom/buried_point” OK +HTTPNMIH:0,0,468 成功收到服务器响应 header 信息 Server: nginx Date: Sun, 10 Jun 2018 04:02:38 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Set-Cookie: think_language=zh-CN; expires=Sun, 10-Jun-2018 05:02:38 GMT; Max-Age=3600; path=/ Set-Cookie: PHPSESSID=l077puu6ri95pnb35n61obk2b0; path=/; HttpOnly Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Encoding: gzip +HTTPNMIC:0,1,63,63,63 成功收到服务器响应 content 信息 ?\0\0\0\0\0\0玍*.I,)-V?訯侍 K 薟睷?5324?55 睱 S 襋 JI,I??\0#??\0\0\0 +HTTPNMIC:0,0,63,63,0 content 字段结束 +HTTPERR:0,-14 +HTTPDISCON:0 服务器连接断开提示 ### 2.1 OneNET HTTP API 应用举例 API 使用说明请参考 OneNET 文档中心>>资源下载>>1.1 说明文档>>NB-IoT 协议设备开发文档 https://open.iot.10086.cn/doc/art398.html#97 本段仅举例创建设备与即时读设备资源命令 ##API-创建 LWM2M 设备## AT+HTTPCREATE="http://api.heclouds.com/" +HTTPCREATE:0 OK at+httpheader=0,"api-key:ChangeForYourOwnKey\r\nContent-Type:application/json\r\nConnection: Close\r\n" APIKey 需替换为实际值 OK at+httpcontent=0,"{"title": "865820030265172"\x2C"desc": "865820030265172"\x2C"protocol": "LWM2M"\x2C"auth_info": {"865820030265172": "460043783403288"}}" ",为 AT 参数分隔符,需要转义处理,不然命令解析会出现异常,使用当前设备 IMEI/IMSI 注册 OK AT+HTTPSEND=0,1,"/devices" 发送 post 请求,创建设备 OK CONNECT OK +HTTPNMIH:0,0,158 Date: Mon, 22 Oct 2018 09:17:06 GMT Content-Type: application/json Content-Length: 59 Connection: keep-alive Server: Apache-Coyote/1.1 Pragma: no-cache +HTTPNMIC:0,0,59,59,59 {"errno":0,"data":{"device_id":"500500178"},"error":"succ"} 设备创建成果,返回设备 Id 为 500500178 +HTTPDISCON:0 AT+MIPLCREATEEX="nbiotbt.heclouds.com:5683",1,"" 创建成功后登陆 +MIPLCREATEEX:0 OK AT+MIPLADDOBJ=0,3200,1,"1",0,1 添加 object OK AT+MIPLOPEN=0,3000,30 登陆 OneNET OK +MIPLEVENT:0,2 +MIPLEVENT:0,6 登陆成功 +MIPLOBSERVE:0,21341,1,3200,0,-1 +MIPLDISCOVER:0,21342,3200 ##API-设备即时命令-读设备资源## at+httpheader=0,"api-key: ChangeForYourOwnKey \r\nConnection: Close\r\n" APIKey 需替换实际值 OK AT+HTTPSEND=0,0,"/nbiot?imei=865820030265172&obj_id=3200" 控制平台下发 READ 命令 OK CONNECT OK +MIPLREAD:0,21345,3200,-1,-1 模组收到平台下发的 READ 提示 AT+MIPLREADRSP=0,21345,1,3200,0,5500,5,1,"0",2,1 模组回复 READ OK AT+MIPLREADRSP=0,21345,1,3200,0,5501,3,3,"-12",1,2 模组回复 READ OK AT+MIPLREADRSP=0,21345,1,3200,0,5750,1,4,"test",0,0 模组回复 READ 并开始传输回复数据 OK +HTTPNMIH:0,0,148 读设备资源 HTTP API 返回 HTTP 数据头 Date: Tue, 23 Oct 2018 02:18:11 GMT Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Connection: close Pragma: no-cache +HTTPNMIC:0,1,144,144,144 读设备资源 HTTP API 返回的HTTP 内容,为设备 回复 READ 上报值 {"errno":0,"error":"succ","data":[{"res":[{"val":false,"res_id":5500},{"val":- 12,"res_id":5501},{"val":"test","res_id":5750}],"obj_inst_id":0}]} +HTTPNMIC:0,0,144,144,0 +HTTPDISCON:0 HTTP 连接断开 AT+MIPLCLOSE=0 关闭 OneNET 连接 OK AT+MIPLDELETE=0 OK 注 当 IMEI 已被注册时将返回注册错误;即时读设备资源命令当设备不在线将返回设备不在线 当设备长时间不与平台通信可能引起路由信息老化或处于休眠模式时而无法收到平台下发的数据; 当一定时间后未回复响应 API 将返回读取超时(unsuccess: TIME_OUT) 其他注意事项请参考 OneNET 平台 API 手册 以上过程仅用于展示 HTTP 操作示例,实际运用中应在客户服务端使用 OneNET API 控制模组进行相应动作 创建设备 HTTP API 中需要在Content 字段输入 json 字符串,由于 json 字符串中存在 AT 命令解析中会被错误识别的双引号+逗号(”,),需要将逗号转义,及前文使用的方法,也可在不影响服务器解析的情况下在逗号前插入换行符避免;或者全文使用十六进制转换后输入;+HTTPSEND 命令暂不支持此操作,请尽量将此类数据放入 content 或者 header 字段上传 **举例如下** at+httpcontent=0,"{"title": "865820030265172"\r,"desc": "865820030265172"\r,"protocol": "LWM2M"\r,"auth_info": {"865820030265172": "460043783403288"},}" OK at+httpcontent=0 +HTTPCONTENT:0,130 {"title": "865820030265172" ,"desc": "865820030265172" ,"protocol": "LWM2M" ,"auth_info": {"865820030265172": "460043783403288"},} OK at+httpcontent=0,"" 清空 content 输入 OK at+httpcontent=0,7B227469746C65223A2022383635383230303330323635313732222C2264657363223A202238363 5383230303330323635313732222C2270726F746F636F6C223A20224C574D324D222C22617574685F696E666F223 A207B22383635383230303330323635313732223A2022343630303433373833343033323838227D2C7D,1 以 16 进制字符串输入 content OK at+httpcontent=0 +HTTPCONTENT:0,127 {"title": "865820030265172","desc": "865820030265172","protocol": "LWM2M","auth_info": {"865820030265172": "460043783403288"},} OK