使用urllib3通过python HTTPS向Azure IoT Hub发送消息不会导致响应

2024-10-03 06:19:18 发布

您现在位置:Python中文网/ 问答频道 /正文

根据官方documentation以及一些在线帖子,当您成功向Azure IoT Hub设备发送消息时,响应为:“204无内容”

我们知道IoTHub已成功发送和接收消息,并且我们可以看到消息(包括消息正文):1)在设备浏览器工具中,2)我们可以通过使用Azure IoT SDK(Azure.eventhub)并创建读取功能来查看消息,3)我们还可以在Azure门户中查看消息

使用Python3.8中的Python请求库发送消息时,确实会得到204响应。然而,对于一个位置,我们需要使用Pythonurllib3库,而我们在发布帖子时根本没有得到任何响应。代码如下。 注意:我们之前尝试过urllib2,但也没有得到响应

  1. Azure IoT Hub通常成功响应的数据类型是什么?它是一个简单的字符串吗

  2. 什么会阻止响应显示在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

Tags: importjson消息ssldatetimeversionbodyazure
1条回答
网友
1楼 · 发布于 2024-10-03 06:19:18

使用urllib3 Python库:要获取状态代码(它是一个整数),必须获取字段status的值。函数read()不返回任何内容

这条线路的工作原理是:

print ("Response status: " + str(httpResponse.status))

相关问题 更多 >