将 REST API 用于 IBM Watson IoT 平台时出现错误 400

Error 400 using REST APIs to IBM Watson IoT platform

我正在尝试使用 REST API 将 json 格式的消息从嵌入式系统传输到 IBM Watson IoT Platform。我已经使用另一个程序(邮递员)测试了 REST APIs 并且它工作正常但是从我的嵌入式系统传输的相同字符串 returns 错误 400。是否有 "extra" 安全证书我需要在我的嵌入式系统中才能完成这项工作吗?还是我还缺少其他东西?

这是一个 link 到 REST API 的消息传递:https://docs.internetofthings.ibmcloud.com/apis/swagger/v0002/http-messaging.html

以下是我的嵌入式系统(通过套接字连接)输出的字符串,其中正确输入了 typeID、deviceID、eventName 和 orgID,并且 encode64(name token)是 name 和 concatenation 的正确授权字符串以 base64 编码的令牌。

POST /api/v0002/device/types/typeID/devices/deviceID/events/eventName HTTP/1.1
Host: orgID.messaging.internetofthings.ibmcloud.com:80
Content-Type: application/json
Authorization: Basic encode64(name token)

{random JSON formatted message}

通过首先解析以下 URI 的 IP 地址建立套接字连接:orgID.messaging.internetofthings.ibmcloud.com 然后对IP地址和端口80使用标准套接字连接功能。

虽然物联网平台 API 没有提到使用端口 80,但我可以通过 Postman 使用端口 80 将我​​的 JSON 格式化消息传输到我的物联网平台。

请求必须包含授权 header。基本身份验证是唯一受支持的方法。应用程序使用 API 密钥进行身份验证。当应用程序通过 Watson IoT Platform HTTP REST API 发出任何请求时,需要用户名和密码。

参考文档:https://console.ng.bluemix.net/docs/services/IoT/applications/api.html#api

我解决了我的问题。我对回车符 return 和换行符的排序不符合 HTTP 规范。即:“\r\n”而不是“\n\r”。现在一切正常。