1

ESP8266-Websocketaws-sdk-arduino (クリーンブランチ)、およびpubsubclientを使用して、websocket を使用して 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 からより良いフィードバックを得る方法はありますか? 私は署名プロセスを台無しにしていますか?(レストコールでは機能しますが)

4

1 に答える 1

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の例は、フルパスを使用していました。クロム(開発者ツールを介して)によってビルドされたリクエストを取得したとき、パスもいっぱいでした。firebugを使用した直後に、ブラウザがサーバーに送信していた実際のリクエストを取得しました(短いパスで)。

これで、引き続きソリューションを試すことができます (esp8266 の websockets を介した mqtt) :-) 動作する場合は、コードを共有します ;-)

于 2016-03-22T05:17:57.470 に答える