本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HTTPS
客户端可以通过RESTAPI使用 HTTP 1.0 或 1.1 协议向发出请求来发布消息。有关HTTP请求使用的身份验证和端口映射,请参见协议、端口映射和身份验证。
注意
HTTPS不支持像这样的clientId
MQTT值。 clientId
使用时可用MQTT,但使用时不可用HTTPS。
HTTPS消息 URL
设备和客户端通过向客户端特定的端点和特定主题发出POST请求来发布消息:URL
https://
IoT_data_endpoint
/topics/url_encoded_topic_name
?qos=1
-
IoT_data_endpoint
是AWS IoT 设备数据端点。您可以使用以下 AWS CLI 命令在 AWS IoT 控制台中的事物详细信息页面或客户端上找到终端节点:aws iot describe-endpoint --endpoint-type iot:Data-ATS
该终端节点看起来应如下所示:
a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com
-
url_encoded_topic_name
是正在发送的消息的完整主题名称。
HTTPS消息代码示例
以下是如何向发送HTTPS消息的一些示例 AWS IoT。
- Python (port 8443)
-
import requests import argparse # define command-line parameters parser = argparse.ArgumentParser(description="Send messages through an HTTPS connection.") parser.add_argument('--endpoint', required=True, help="Your AWS IoT data custom endpoint, not including a port. " + "Ex: \"abcdEXAMPLExyz-ats.iot.us-east-1.amazonaws.com\"") parser.add_argument('--cert', required=True, help="File path to your client certificate, in PEM format.") parser.add_argument('--key', required=True, help="File path to your private key, in PEM format.") parser.add_argument('--topic', required=True, default="test/topic", help="Topic to publish messages to.") parser.add_argument('--message', default="Hello World!", help="Message to publish. " + "Specify empty string to publish nothing.") # parse and load command-line parameter values args = parser.parse_args() # create and format values for HTTPS request publish_url = 'https://' + args.endpoint + ':8443/topics/' + args.topic + '?qos=1' publish_msg = args.message.encode('utf-8') # make request publish = requests.request('POST', publish_url, data=publish_msg, cert=[args.cert, args.key]) # print results print("Response status: ", str(publish.status_code)) if publish.status_code == 200: print("Response body:", publish.text)
- Python (port 443)
-
import requests import http.client import json import ssl ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_CLIENT) ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2 # note the use of ALPN ssl_context.set_alpn_protocols(["x-amzn-http-ca"]) ssl_context.load_verify_locations(cafile="./<root_certificate>") # update the certificate and the AWS endpoint ssl_context.load_cert_chain("./<certificate_in_PEM_Format>", "<private_key_in_PEM_format>") connection = http.client.HTTPSConnection('<the ats IoT endpoint>', 443, context=ssl_context) message = {'data': 'Hello, I'm using TLS Client authentication!'} json_data = json.dumps(message) connection.request('POST', '/topics/device%2Fmessage?qos=1', json_data) # make request response = connection.getresponse() # print results print(response.read().decode())
- CURL
-
您可以使用来自客户端或设备的 curl
向 AWS IoT发送消息。 使用 curl 从 AWS IoT 客户端设备发送消息
-
检查 curl 版本。
-
在客户端上,在命令提示符下运行此命令。
curl --help
在帮助文本中,查找TLS选项。您应看到
--tlsv1.2
选项。 -
如果您看到
--tlsv1.2
选项,请继续操作。 -
如果您没有看到
--tlsv1.2
选项或者收到command not found
错误,则您可能需要先在客户端上更新或安装 curl,或者安装openssl
,然后再继续。
-
-
在客户端上安装证书。
复制您在 AWS IoT 控制台中注册客户端(事物)时创建的证书文件。请先确保客户端上有这三个证书文件,然后再继续。
-
CA 证书文件 (
Amazon-root-CA-1.pem
在这个例子中)。 -
客户的证书文件 (
device.pem.crt
在这个例子中)。 -
客户的私钥文件 (
private.pem.key
在这个例子中)。
-
-
创建 curl 命令行,并替换您的账户和系统的可替换值。
curl --tlsv1.2 \ --cacert
Amazon-root-CA-1.pem
\ --certdevice.pem.crt
\ --keyprivate.pem.key
\ --request POST \ --data "{ \"message\": \"Hello, world\" }
" \ "https://IoT_data_endpoint
:8443/topics/topic
?qos=1"- --tlsv1.2
-
使用 TLS 1.2 (SSL)。
- --cacert
Amazon-root-CA-1.pem
-
用于验证对等方的 CA 证书的文件名和路径(如有必要)。
- --cert
device.pem.crt
-
客户端的证书文件名和路径(如有必要)。
- --key
private.pem.key
-
客户端的私有密钥文件名和路径(如有必要)。
- --请求 POST
-
HTTP请求的类型(在本例中为POST)。
- --数据”
{ \"message\": \"Hello, world\" }
" -
您要发布HTTPPOST的数据。在本例中,它是一个JSON字符串,内部引号用反斜杠字符 (\) 进行转义。
- “https://
IoT_data_endpoint
:8443/topics/topic
? qos=1" -
在本例中URL为客户端的 AWS IoT 设备数据端点
:8443
,然后是端HTTPS口,然后是关键字/topics/
和主题名称。topic
指定服务质量作为查询参数?qos=1
。
-
在 AWS IoT 控制台中打开MQTT测试客户端。
按照中的使用 MQTT 客户端查看 AWS IoT MQTT 消息说明进行操作,将控制台配置为订阅主题名称为的消息
topic
在你的curl命令中使用,或者使用通配符主题过滤器。#
-
测试命令。
在 AWS IoT 控制台的测试客户端中监控主题时,请转到客户端并发出您在步骤 3 中创建的 curl 命令行。控制台中应显示客户端的消息。
-