概述
客户端可以通过 HTTP(s) POST 方式发送 REST 请求发布 MQTT 消息。 该方式支持 HTTP 1.0和1.1协议。
URL
实例支持 HTTP URL 如下:
http(s)://${instance-access-pooint}/topics/${url-encoded-topic-name}?qos=${qos}&retained=${retained}&client_id=${ClientId}&username=${Username}
变量 | 语义 | 示例值 | 可选 |
instance-access-point | mqtt-example-sh-public.mqtt.tencenttdmq.com | 否 | |
url-encoded-topic-name | 要发送的 Topic 名称,URL encoded。 | home | 否 |
qos | 发送 MQTT 消息时选择 QoS,默认值为1,即 at-least-once。 | 1 | 是 |
retained | 发送的消息是否是 retained 消息。 | false | 否 |
client_id | 使用的 client-id 发送 MQTT 消息,参与授权验证。 如果在一机一证场景,使用证书 Common Name 字段。 其它场景默认值是 http-${connection-id}。 | curl001 | 是 |
username | 连接、发送时使用的用户名,参与授权验证。 如果使用 Basic Authentication Header,取 Basic Authentication Header 中用户名部分。 | SampleUser | 是 |
认证
目前支持 Basic HTTP Authentication 和基于 X509 证书的“一机一证”两种认证方式。暂未支持基于 JWT 的认证方式。
说明:
Basic HTTP Authentication
In basic HTTP authentication, a request contains a header field in the form of Authorization: Basic <credentials>, where <credentials> is the Base64 encoding of ID and password joined by a single colon ':'.
示例 1
缺省 username 字段。
curl --verbose --request POST -H "Authorization: Basic dXNlcjA6c2VjcmV0MA==" --data "{ \\"message\\": \\"Hello, world\\" }" "http://mqtt.cloud.tencent.com/topics/home?qos=1&client_id=curl-x&retained=true"
示例 2
提供 HTTP(s) 发送时使用的 username。
注意:
Username 会参与 ACL 授权。
curl --verbose -k --request POST -H "Authorization: Basic dXNlcjA6c2VjcmV0MA==" --data "{ \\"message\\": \\"Hello, world\\" }" "https://mqtt.cloud.tencent.com/topics/home?qos=1&client_id=curl-x&retained=true&username=sample-user"
BYOC
支持基于 X509一机一证使用场景。
示例 1
说明:
客户端信任的证书为:CA.crt。
客户端证书链为:client.chain.crt。
客户端私钥为:client.pkcs8.key。
curl --tlsv1.2 \\--cacert CA.crt \\--cert client.chain.crt \\--key client.pkcs8.key \\--verbose \\--request POST \\--data "{ \\"message\\": \\"Hello, world\\" }" \\"https://mqtt.cloud.tencent.com/topics/home?qos=1"
授权
HTTP POST 方式类似 WebSocket,正常参与所有的授权流程。如果使用 HTTP 1.0协议,每次发送都会执行完整的 CONNECT,PUBLISH 流程,也会执行对应的的鉴权、授权操作。