我正在使用ESP8266-Websocket,aws-sdk-arduino(已清理的分支)和pubsubclient尝试使用websockets与aws iot mqtt服务进行通信。
我的问题是关于第一个连接请求。我正在使用这个浏览器应用程序作为参考https://github.com/awslabs/aws-iot-examples和来自aws-sdk-arduino的符号代码(可以很好地调用aws iot restful api)
我的请求是这样的(在443端口连接到端点之后):
GET wss://ENDPOINT.iot.us-west-2.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AWSKEY%2F20160318%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20160318T183246Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a1f0d7b58983f9dff7e3bf6cab062db3243ebafc990803a018c6a23433891404 HTTP/1.1
host: ENDPOINT.iot.us-west-2.amazonaws.com
Connection: Upgrade
Upgrade: websocket
Origin: file://
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: D2alJOyUkBlR+8yhv2UBLg==
Sec-WebSocket-Protocol: mqtt
但我一直在
HTTP/1.1 403 Forbidden
content-type: application/json
content-length: 241
date: Fri, 18 Mar 2016 18:34:57 GMT
x-amzn-RequestId: f2edfe83-1bbc-4481-97e0-39ccfc4d1c2f
connection: Keep-Alive
x-amzn-ErrorType: ForbiddenException:
我错过了一些请求标头参数吗?无论如何从x-amzn-ErrorType获得更好的反馈:ForbiddenException?我在签收过程中搞砸了吗? (即使它适用于休息呼叫)
答案 0 :(得分:0)
是的,我终于得到了响应状态101切换协议\ o /
在构建请求时,必须是:
GET /mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AWSKEY%2F20160318%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20160318T183246Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a1f0d7b58983f9dff7e3bf6cab062db3243ebafc990803a018c6a23433891404 HTTP/1.1
而不是
GET wss://ENDPOINT.iot.us-west-2.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AWSKEY%2F20160318%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20160318T183246Z&X-Amz-Expires=86400&X-Amz-SignedHeaders=host&X-Amz-Signature=a1f0d7b58983f9dff7e3bf6cab062db3243ebafc990803a018c6a23433891404 HTTP/1.1
我所遵循的js示例使用的是完整路径。当我收到chrome(通过开发人员工具)构建的请求时,路径也已满。刚使用firebug后,我得到了浏览器发送到服务器的真实请求(短路径)。
现在我可以继续尝试解决方案(在esp8266上通过websockets进行mqtt):-)如果有效,我会分享代码; - )