订阅带有C ++的AWS AppSync

时间:2020-02-04 19:45:24

标签: c++ mqtt aws-appsync

我正在尝试使用从订阅查询到AWS appsync的预签名url返回来创建mqtt连接。

预签名的网址如下所示: wss://iotendpoint-ats.iot.us-west-2.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AAAAAAAAAAAA%2F20200203%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20200203T190240Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature>&X-Amz-Security-Token=<token>

当前,我正在尝试按以下方式在aws-crt-cpp库中使用MQTTClient:

char * url = "wss://iotendpoint-ats.iot.us-west-2.amazonaws.com/mqtt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AAAAAAAAAAAA%2F20200203%2Fus-west-2%2Fiotdevicegateway%2Faws4_request&X-Amz-Date=20200203T190240Z&X-Amz-Expires=3600&X-Amz-SignedHeaders=host&X-Amz-Signature=<signature>&X-Amz-Security-Token=<token>"

Aws::Crt::Mqtt::MqttClient *mqttClient = new Aws::Crt::Mqtt::MqttClient(bootstrap);

std::shared_ptr<Aws::Crt::Mqtt::MqttConnection> mqttConnection = mqttClient->NewConnection(url, 443, Aws::Crt::Io::SocketOptions(), true);

但是我收到以下错误: aws-c-io: AWS_IO_DNS_INVALID_NAME, Host name was invalid for dns resolution.

我可以使用curl打开一个websocket连接,所以我知道URL是有效的。似乎该库无法处理websocket端点中的参数。有人在C ++中使用预签名的URL创建MQTT订阅吗?

1 个答案:

答案 0 :(得分:0)

解决方案是在mqttConnection上设置一个WebsocketInterceptor。有关详细信息,请参见:this comment

相关问题