【发布时间】:2021-07-02 14:04:48
【问题描述】:
根据官方documentation和网上的几篇帖子,成功发送消息到Azure IoT Hub设备的响应是:“204 No Content”。
我们知道消息已成功发送并被 IoTHub 接收,我们可以看到消息(包括消息正文):1)在 Device Explorer 工具中,2)我们可以使用 Azure IoT SDK(azure.eventhub)看到它并创建一个读取函数 3) 我们还可以在 Azure 门户中看到消息。
在 Python 3.8 中使用 Python 请求库 发送消息时,我们确实收到了 204 响应。但是,对于一个位置,我们需要使用 Python urllib3 库,而我们在进行 POST 时根本没有得到任何响应。代码如下。 注意:我们之前尝试了 urllib2 也没有得到响应。
-
Azure IoT Hub 通常成功响应的数据类型是什么?是简单的字符串吗?
-
什么可能阻止响应显示在 urllib3 和 urllib2 中?
谢谢。 生长激素
import urllib3
import json
import datetime
import ssl
import certifi
print("certifi: " + certifi.where())
print("urllib3 ver: " + urllib3.__version__)
print("ssl ver: " + ssl.OPENSSL_VERSION)
# IoT DeviceID
deviceID = "gwy1"
# Iot Hub Name
IoTHubName = "aziothub1"
# RestAPI Version
iotHubAPIVer = "2020-03-13"
iotHubRestURI = "https://" + IoTHubName + ".azure-devices.net/devices/" + deviceID + "/messages/events?api-version=" + iotHubAPIVer
SASToken = "SharedAccessSignature sr=gwy1-aziothub1.azure-devices.net%2Fdevices%2Fglualwpr-gwy1&sig=v-----------------------------------&se=1629182336"
# Message Payload
datetime = datetime.datetime.now()
body = {}
body['datetime'] = str(datetime)
body['deviceClient'] = deviceID
body['Message'] = 'Python Device to Cloud Message over HTTPS'
encoded_body = json.dumps(body)
# Headers
Headers = {
'Content-type' : 'application/json',
'Authorization' : SASToken
}
http = urllib3.PoolManager(ssl_version=ssl.PROTOCOL_TLSv1_2)
httpResponse = http.request('POST', iotHubRestURI,
headers=Headers,
body=encoded_body)
print ("response: " + httpResponse.read()) # Do something with the response
【问题讨论】:
-
urllib3得到的状态码是什么? -
在 urllib3 中,我们得到一个空响应(空白)。早些时候我们尝试了 urllib2,但由于没有响应(空响应),我们尝试了 urrlib3。但是,urllib3 是一样的。谢谢。
-
我的意思是
httpResponse.status代码是什么? -
感谢 Abdul Niyas,您的评论让我们找到了答案
标签: python azure python-2.7 rest azure-iot-hub