При запуске azure iotc.connect () из Python: Docker контейнера базового образа 3.7 возникает ошибка неверного URL - PullRequest
0 голосов
/ 03 ноября 2019

Мой сценарий работает правильно и может подключаться к центральному IOT при запуске на хосте RaspberryPi, Python3.7, а также с моего ноутбука Windows10. Однако возникает InvalidURL (f "URL не может содержать управляющие символы. Ошибка {url! R} при запуске в контейнере, созданном с python: 3.7-buster.

Я пробовал различные образы Python Dockerно получил ту же ошибку.

import iotc
from iotc import IOTConnectType, IOTLogLevel
from random import randint
import settings, client
import json, time

# settings_fp = r"config.json"
settings_fp = '/var/lib/project/config.json'


with open(settings_fp, 'r') as settings_file:
  settings = json.load(settings_file)

scopeId = settings['cloud']['scope_id']
deviceId = settings['cloud']['device_id']
deviceKey = settings['cloud']['primary_key']

iotc = iotc.Device(scopeId, deviceKey, deviceId, IOTConnectType.IOTC_CONNECT_SYMM_KEY)
iotc.setLogLevel(IOTLogLevel.IOTC_LOGGING_API_ONLY)

gCanSend = False
gCounter = 0

def onconnect(info):
  global gCanSend
  print("- [onconnect] => status:" + str(info.getStatusCode()))
  if info.getStatusCode() == 0:
     if iotc.isConnected():
       gCanSend = True
       print("Connected to the cloud!!!")

def onmessagesent(info):
  print("\t- [onmessagesent] => " + str(info.getPayload()))

def oncommand(info):
  print("- [oncommand] => " + info.getTag() + " => " + str(info.getPayload()))

def onsettingsupdated(info):
  print("- [onsettingsupdated] => " + info.getTag() + " => " + info.getPayload())

iotc.on("ConnectionStatus", onconnect)
iotc.on("MessageSent", onmessagesent)
iotc.on("Command", oncommand)
iotc.on("SettingsUpdated", onsettingsupdated)

iotc.connect() # code fails here

Я ожидаю нормального подключения к центральному IOT, но вместо этого получаю

InvalidURL (f "URL не может содержать управляющие символы. {url! r} "

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

О проблеме сообщили здесь и она устранена в версии 0.3.5 пакета iotc.

0 голосов
/ 08 ноября 2019

Добавление разрешения для справки:

Версия 0.3.4 хорошо работает при работе на Python 2.7 и не дает ошибок при доступе к URL.

Миграция с одногоhttp строка заголовка для объекта заголовков. Это исправляет ошибку разбора URL-адреса с python 3+ и последней версией http lib.

Подробнее см. Исключение при подключении к клиенту Python IoTC: InvalidURL

0 голосов
/ 08 ноября 2019

У меня была такая же проблема, обязательно используйте Python 3.7, PIP3 и установите iotc с PIP3, и это работало, в моем случае это было несколько версий, и я установил iotc с Python2.7

pip3 installИОТК

...