Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门。HTTPS
客户端可使用 HTTP 1.0 或 1.1 协议向 REST API 发出请求来发布消息。有关 HTTP 请求使用的身份验证和端口映射,请参阅协议、端口映射和身份验证。
与 MQTT 不同,HTTPS 不支持 clientId
值。因此,虽然在使用 MQTT 时 clientId
可用,但在使用 HTTPS 时不可用。
HTTPS 消息 URL
设备和客户端通过向特定于客户端的终端节点和特定于主题的 URL 发出 POST 请求来发布消息:
https://IoT_data_endpoint
/topics/url_encoded_topic_name
?qos=1"
-
IoT_data_endpoint
是 Amazon IoT 设备数据终端节点。您可以在 Amazon IoT 控制台中的事物详细信息页面上或使用 Amazon CLI 命令在客户端上查找该终端节点:
aws iot describe-endpoint --endpoint-type
iot:Data-ATS
该终端节点看起来应如下所示:a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com
-
url_encoded_topic_name
是正在发送的消息的完整主题名称。
HTTPS 消息代码示例
以下是一些如何向 Amazon IoT 发送 HTTPS 消息的示例。
- Python
-
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 Amazon 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)
- CURL
-
您可以使用来自客户端或设备的 curl 向 Amazon IoT 发送消息。
使用 curl 从 Amazon IoT 客户端设备发送消息
-
检查 curl 版本。
-
在客户端上,在命令提示符下运行此命令。
curl --help
在帮助文本中,查找 TLS 选项。您应看到 --tlsv1.2
选项。
-
如果您看到 --tlsv1.2
选项,请继续操作。
-
如果您没有看到 --tlsv1.2
选项或者收到 command not found
错误,则您可能需要先在客户端上更新或安装 curl,或者安装 openssl
,然后再继续。
-
在客户端上安装证书。
复制您在 Amazon IoT 控制台中注册客户端(事物)时创建的证书文件。请先确保客户端上有这三个证书文件,然后再继续。
-
CA 证书文件(此示例中为 Amazon-root-CA-1.pem
)。
-
客户端的证书文件(此示例中为 device.pem.crt
)。
-
客户端的私有密钥文件(此示例中为 private.pem.key
)。
-
创建 curl 命令行,并替换您的账户和系统的可替换值。
curl --tlsv1.2 \
--cacert Amazon-root-CA-1.pem
\
--cert device.pem.crt
\
--key private.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
-
客户端的私有密钥文件名和路径(如有必要)。
- --request POST
-
HTTP 请求的类型(此示例中为 POST)。
- --data "
{ \"message\": \"Hello, world\" }
"
-
要发布的 HTTP POST 数据。在此示例中,它是一个 JSON 字符串,其内部引号通过反斜杠字符 (\) 进行转义。
- "https://
IoT_data_endpoint
:8443/topics/topic
?qos=1"
-
客户端的 Amazon IoT 设备数据终端节点的 URL,后跟 HTTPS 端口 :8443
,它后跟关键字 /topics/
和主题名称 topic
(在此示例中)。指定服务质量作为查询参数 ?qos=1
。
-
在 Amazon IoT 控制台中打开 MQTT 测试客户端。
按照 使用 Amazon IoT MQTT 客户端查看 MQTT 消息 中的说明执行操作,配置控制台以订阅消息,该消息应带有 curl 命令中所用的名为 topic
的主题,或使用 #
通配符主题筛选条件。
-
测试命令。
在 Amazon IoT 控制台的测试客户端中监控主题时,请转到客户端并发出您在步骤 3 中创建的 curl 命令行。控制台中应显示客户端的消息。