Запросы IBM Watson IoT и Python

Я создал платформу 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

В чем может быть причина неудачной аутентификации?


person Michael Nielsen    schedule 09.10.2017    source источник


Ответы (2)


Вы пробовали подключиться по HTTPS? Начиная с середины года, по умолчанию организации настроены на отклонение небезопасных подключений, если пользователь специально не разрешает это (вы можете найти этот параметр на панели настроек на панели управления, если вы хотите включить незашифрованное подключение в своей организации), это это одна из возможных причин, по которой вы получаете 403 недопустимых ответа.

К вашему сведению, вас также может заинтересовать клиентская библиотека Python, которая поддерживает Только HTTP-соединение, а также более многофункциональный клиент MQTT:

pip install 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)
person DavidParker    schedule 09.10.2017

Ваш код действительно работает для меня, так что может быть так, как Дэвид Паркер говорит, что http не разрешен. Также возможно, что ваш токен испортился. Я всегда кодирую заголовок аутентификации - x="use-token-auth:password".encode('base64') `

Или этот жетон, который у вас есть, неправильный.

person amadain    schedule 09.10.2017