您的位置首页  散文评论

行助手(行助手连接服务器失败)万万没想到

请求数据的数据格式如下:{“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了。

这部分内容下次超子再给大家介绍

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186