2017-10-09 4 views
1

J'ai créé une plate-forme IBM Watson IdO, et un type de dispositif « testdevice ».IBM Watson IdO et Python Demandes

Je voudrais un simple test où je pousse des données via un script Python et l'API HTTP.

Jusqu'à présent, je suis parvenu à être en mesure de pousser les données, mais obtenir:

(403, 'Not allowed') 

Je peux voir dans le IBM Watson IdO journal que mon ordinateur a essayé de pousser les données, mais Authentication failed.

En tant que tête de requête J'utilise auth=('use-token-auth', 'MY-TOKEN') donc tout le code est:

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 

Quelle pourrait être la raison pour l'authentification à défaut?

Répondre

1

Avez-vous essayé la connexion via HTTPS? Depuis le milieu de l'année, par défaut, les organisations sont configurées pour rejeter les connexions non sécurisées, sauf si un utilisateur le permet spécifiquement (vous pouvez trouver cette option dans le panneau de configuration du tableau de bord si vous souhaitez activer la connectivité non cryptée). est une raison possible pour laquelle vous obtenez 403 réponses non autorisées.

Pour votre information, vous pourriez également être intéressé par le Python client library, qui supporte une HTTP seule connexion, ainsi que le plus riche en fonctionnalités client MQTT:

pip installer 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) 
0

Votre code fonctionne pour moi, donc pourrait être comme DavidParker dit http n'est pas autorisé. Il pourrait aussi être votre jeton devient foiré. Je code toujours l'en-tête d'authentification - x="use-token-auth:password".encode('base64') `

Ou, ce jeton que vous avez, est faux.