请问一下如何使用MQTT python的sdk通过443端口连接mqtt呢?有使用过的吗?我上网找的代码都是需要上传证书的,但是阿里云的服务器不让上传证书
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要使用MQTT Python SDK通过443端口连接到阿里云物联网平台,您无需上传证书,因为阿里云IoT支持通过TLS加密的端口进行安全连接。以下是一个基于paho-mqtt库的示例代码片段,展示如何实现这一配置:
import paho.mqtt.client as mqtt
# 阿里云物联网平台参数
product_key = "<您的ProductKey>"
device_name = "<您的DeviceName>"
device_secret = "<您的DeviceSecret>"
region_id = "cn-shanghai" # 根据实际情况替换为您的RegionId
# MQTT连接参数
mqtt_host = f"{product_key}.iot-as-mqtt.{region_id}.aliyuncs.com"
mqtt_port = 443 # 使用443端口进行TLS连接
client_id = f"{device_name}|securemode=3,signmethod=hmacsha1|{product_key}"
# 生成用户名和密码
username = device_name
password = get_password(device_secret) # 实现get_password函数以根据设备密钥生成密码,参考阿里云文档说明<sup>[1]</sup>
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe("/sys/" + product_key + "/" + device_name + "/thing/event/property/post")
def on_message(client, userdata, msg):
print(msg.topic+" "+str(msg.payload))
# 初始化客户端
client = mqtt.Client(client_id=client_id, protocol=mqtt.MQTTv311)
client.username_pw_set(username, password)
# 设置 TLS 连接
client.tls_set() # 默认信任CA根证书,如需自定义证书验证,请查阅相应文档调整此设置
# 设置回调函数
client.on_connect = on_connect
client.on_message = on_message
# 建立连接
client.connect(mqtt_host, mqtt_port, keepalive=60)
# 开始循环,处理网络通信
client.loop_forever()
请注意: - 上述代码中get_password
函数需要您根据阿里云提供的方法实现,用于从设备密钥生成连接所需的密码。 - 确保您的Python环境已安装paho-mqtt
库,可通过运行pip install paho-mqtt
来安装。 - 使用443端口时,连接会默认采用TLS加密,因此不需要额外上传或配置SSL证书。 - 请将product_key
、device_name
和device_secret
替换为您在阿里云物联网平台实际的设备信息。
参考文献:
阿里云物联网平台提供了详细的SDK使用指南和认证机制说明,具体实现细节请参照官方文档。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。