行助手(行助手连接服务器失败)万万没想到
请求数据的数据格式如下:{“clientId”:“@”,“sign”:“#”,“productKey”:“*”,“deviceName”:“amp;
题目大家好,超子又和大家见面了,超子我能力有限,水平不高,有什么错误的地方,欢迎板砖超子接下来介绍如何构建HTTP的报文,对接阿里云物联网平台上传数据总的来说我们需要经过两步走第1步:认证,通过HTTP报文上报设备的三元组等信息,进行认证,上报信息准确的话,服务器会在回复的报文中,下发认证的令牌token,目前平台token支持的有效期是7天。
第2步:上传数据,每次上传需要携带第1步下发的令牌token,如果过了有效期,需要再次认证,然后携带新的token令牌上传数据在讲解具体的报文构建之前,我们先要了解HTTP报文的结构,分为3个部分请求行:包含请求方法,比如上一篇文章提到的GET或是POST,然后还有URL以及HTTP协议版本,阿里云用的版本是HTTP/1.1,至于URL,我们等到具体构建报文的时候再看 。
请求头部( header ):包含一些关键的消息,阿里云会告诉你必须包含的头部,后面我们在具体看请求数据(body):POST方法需要body,因为POST是上传数据,body就是要上传的数据内容。
我们看上图,阿里云给出了请求行和请求头部( header )以及请求数据(body)的例子和说明上图例子中的请求头部( header )有HOST和Content-Type,但是少一个Content-Length,表示请求数据(body)有多少个字节,POST方法必须有,但是图中没有给出,这点要注意一下,可能阿里云觉得大家都应该知道POST需要Content-Length,所以上图中就没写出来。
上图中POST /auth HTTP/1.1是请求行,其中POST是请求方法,/auth 是URL地址,HTTP/1.1是使用的版本,请求行必须完整的独占一行接下来看请求头部( header ),其中HOST就是我们需要访问的阿里云服务器地址,可以是IP或是域名形式,这里阿里给出的是域名。
Content-Type表示阿里云要求的数据编码格式,只有满足格式要求,才能正确的解析数据,阿里需要的是json格式数据Content-Length需要构建好body后,才能知道具体有多少字节HOST和Content-Type以及Content-Length各自独占一行。
请求数据(body)包含着三元组的信息,是认证的关键。特别注意一点,请求头部( header )和请求数据(body)之间必须通过一个空行间隔,如果没有的话,就会出错,这一点一定要多加注意和小心。
请求数据(body)的数据格式如下:{“clientId”:“@”,“sign”:“#”,“productKey”:“*”,“deviceName”:“$"}其中@、#、*和$,必须替换成相应的数据,我们先拿出三元组的信息,看上图。
其中*和$很直观,*是产品秘钥,$是设备名称,@是客户端ID,可以自己定义,但是长度必须在64字符内,那么@的话,我就用产品秘钥&设备名称吧,我们先搞定以上3个,结果如下:@是:a12dTIroTJC&D001
*是:a12dTIroTJC$是:D001最后就差#了,#需要做一步hmacsha5加密才能得到,加密的明文如下:clientId%sdeviceName%sproductKey%s3个%s需要替换成相应的数据,前面我们都准备好了,注意clientId后面的%s,就是前面的@。
我们先把明文构建好,结果如下:clientIda12dTIroTJC&D001deviceNameD001productKeya12dTIroTJC明文一定要小心,不要多一个或是少一个字符,尤其是注意不要多空格,尤其是最后面如果多了空格,还不容易检查出来。
还有就是最后面不要多回车,这个也不容易看出来hmacsha5加密的秘钥就是三元组里的设备秘钥jBiRd3INpmL0zrb8XgURzP6JJOmFWMdJ网上找一个加密网站,我们做一下加密。
一定要检查明文和秘钥后面不要多空格和回车然后我们使用hmacsha5加密,如此一来,请求数据(body)中最后的#也就搞定了,结果如下:2f93c54d09f22eefacd04cf7cd826159把@、#、*和$全部替换,最终的请求数据(body)结果如下:
{"clientId":"a12dTIroTJC&D001","sign":"2f93c54d09f22eefacd04cf7cd826159","productKey":"a12dTIroTJC","deviceName":"D001"}
数据一共是120个字节,所以我们可以确定请求头部( header )中的Content-Length的值了,就是120然后我们构建一下整个报文,结果如下POST /auth HTTP/1.1Host: iot-as-http.cn-shanghai.aliyuncs.com。
Content-Type: application/jsonContent-Length: 120{"clientId":"a12dTIroTJC&D001","sign":"2f93c54d09f22eefacd04cf7cd826159","productKey":"a12dTIroTJC","deviceName":"D001"}
一定要注意, header和body之间,要有一个空行,绝对不能少了接下来用网络调试助手实测一下首先建立TCP连接,远程主机地址和端口号如下所示:iot-as-http.cn-shanghai.aliyuncs.com:80。
我们先建立TCP连接,然后把认证报文发给阿里云服务器,上图我们可以看到,如果我们的报文构建正确,阿里云会回复相应的数据,上图中红圈标注的,就是阿里云返回给我们的令牌token,我们接下来发送具体数据的时候,就要用到token了。
这部分内容下次超子再给大家介绍
- 标签:
- 编辑:李松一
- 相关文章
-
cdr12(Cdr12加颜色)怎么可以错过
1.打开coreldraw软件双击coreldraw打开2.新建文件保存文件名为服装色彩设计-CorelDraw十二色环绘制点击新建保存文件名为…
-
抢滩登陆战2012(抢滩登陆战2002无法发射飞弹)居然可以这样
m 飞弹,专炸飞机。f 照明弹,只在黑夜能用。b 求救,会派飞机帮你。 在抢滩登陆战作弊码。在游戏中按以下的数字键即可实现相应秘籍:1 …
- 金嗓子功放(金嗓子功放电路图)一篇读懂
- 中欣卡官网(中欣卡)干货满满
- 覃宏(覃宏个人资料)干货分享
- 陈慧琳演唱会(陈慧琳演唱会都是你的错)硬核推荐
- 临海在线论坛(临海在线论坛新荣记快歺偏贵)真没想到