【问题标题】:Error 400 using REST APIs to IBM Watson IoT platform将 REST API 用于 IBM Watson IoT 平台时出现错误 400
【发布时间】:2017-04-20 21:14:18
【问题描述】:

我正在尝试使用 REST API 从嵌入式系统向 IBM Watson IoT Platform 传输 json 格式的消息。我已经使用另一个程序(邮递员)测试了 REST API,它工作正常,但是从我的嵌入式系统传输的相同字符串返回错误 400。我的嵌入式系统中是否需要“额外”安全证书才能使这项工作?还是我还缺少其他东西?

这是用于消息传递的 REST API 的链接:https://docs.internetofthings.ibmcloud.com/apis/swagger/v0002/http-messaging.html

以下是我的嵌入式系统(通过套接字连接)输出的字符串,其中 typeID、deviceID、eventName 和 orgID 输入正确,encode64(name token) 是 name 和 token 连接的正确授权字符串编码在 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端口使用标准套接字连接函数。

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

【问题讨论】:

    标签: rest ibm-cloud iot


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我正在使用适当的授权标头。正如我所说,它在邮递员中有效,但在嵌入式设备上无效(也就是说,如果我在邮递员中排除授权,它将在邮递员中无效)。
      • 您是否包含请求标头以指定 Content-Type 为 application/json ?
      • Valerie:感谢您的回复:我已经编辑了我的帖子以提供更多信息。回答您的问题:是的,我确实将内容类型指定为 application/json
      猜你喜欢
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多