【问题标题】:IBM Watson IoT and Python RequestsIBM Watson IoT 和 Python 请求
【发布时间】:2017-10-09 08:57:35
【问题描述】:

我创建了一个 IBM Watson IoT 平台和一个设备类型“testdevice”。

我想要一个简单的测试,通过 Python 脚本和 HTTP API 推送数据。

到目前为止,我已经能够推送数据,但是得到:

(403, 'Not allowed')

我可以在 IBM Watson IoT 日志中看到我的计算机已尝试推送数据,但 Authentication failed

作为请求标头,我使用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

身份验证失败的原因是什么?

【问题讨论】:

    标签: python http ibm-cloud watson-iot


    【解决方案1】:

    您是否尝试过通过 HTTPS 连接?从年中开始,默认情况下,组织被配置为拒绝不安全的连接,除非用户专门启用此功能(如果您想在组织中启用未加密的连接,您可以在仪表板的设置面板中找到此选项),这是您收到 403 not allowed 响应的一个可能原因。

    仅供参考,您可能还对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)
    

    【讨论】:

      【解决方案2】:

      你的代码确实对我有用,所以可能正如 DavidParker 所说的那样,http 是不允许的。也可能是您的令牌弄乱了。我总是对身份验证标头进行编码 - x="use-token-auth:password".encode('base64') `

      或者,你拥有的那个标记是错误的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-21
        • 2020-05-29
        • 1970-01-01
        相关资源
        最近更新 更多