我创建了一个 IBM Watson IoT 平台和一个设备类型“testdevice”。
我想要一个简单的测试,通过 Python 脚本和 HTTP API 推送数据。
到目前为止,我已经设法能够推送数据,但得到:
(403, 'Not allowed')
我可以在 IBM Watson IoT 日志中看到我的计算机已尝试推送数据,但身份验证失败
。
作为请求 header ,我使用 auth=('use-token-auth', 'MY-TOKEN')
所以整个代码是:
import requests
response = requests.post('http://MY-ORG-ID.messaging.internetofthings.ibmcloud.com:1883/api/v0002/device/types/testdevice/devices/MY-DEVICE/events/test', data={'number': 1}, auth=('use-token-auth', 'MY-TOKEN'), headers={'Content-type': 'application/json'})
print(response.text) #TEXT/HTML
print(response.status_code, response.reason) #HTTP
认证失败可能是什么原因?
最佳答案
您是否尝试过通过 HTTPS 进行连接?从年中开始,默认情况下,组织被配置为拒绝不安全的连接,除非用户专门启用此功能(如果你想在你的组织中启用未加密的连接,你可以在仪表板的设置面板中找到这个选项),这是您收到 403 不允许响应的一个可能原因。
仅供引用,您可能还对 Python client library 感兴趣,它支持仅 HTTP 连接以及功能更丰富的 MQTT 客户端:
pip 安装 ibmiotf
import ibmiotf.device
options = {"org": orgId, "type": "testdevice", "id": "MY-DEVICE", "auth-method": "token" , "auth-token": "MY-TOKEN"}
client = ibmiotf.device.HttpClient(options)
data={'number': 1}
client.publishEvent("test", "json", data)
关于python - IBM Watson IoT 和 Python 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46642459/