aws sns确认订阅请求处理问题

时间:2018-07-25 02:04:06

标签: express amazon-sns

我正在尝试为s3中的存储桶实施aws sns服务,并且我正在遵循本文档https://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html 据此,在确认订阅的请求中将有订阅URL,该订阅URL即将到达我们提供的URL,但是我在请求中收到空的正文。 我试图记录尸体,但给了我一个空的物体。并尝试使用bodyparser,但结果相同。

这是我正在实施的路线。

 router.post("/s3FileCallback", function (req, res) {
      debugger;
      var bodyParser = require('body-parser');
      var app = express();
      app.use(bodyParser.urlencoded({ extended: false }));
      app.use(bodyParser.json())
      if (req.get("x-amz-sns-message-type") == "SubscriptionConfirmation") {
        console.log("arn" + req.get("x-amz-sns-topic-arn"));
        const subscribeUrl = req.body.SubscribeURL;
        console.log("subscribeUrl" + subscribeUrl);
})

有什么我想念的东西吗?谁能指出我的正确方向?

2 个答案:

答案 0 :(得分:2)

我发现了我所缺少的,

router.post("/s3FileCallback", function (req, res) {
      debugger;
      if (req.get("x-amz-sns-message-type") == "SubscriptionConfirmation") {
        console.log("arn" + req.get("x-amz-sns-topic-arn"));
        const subscribeUrl = req.body.SubscribeURL;
        console.log("subscribeUrl" + subscribeUrl);
})

我正在使用正文解析器作为中间件, 亚马逊在帖子请求中以文本\纯文本的形式发送内容类型,感谢这个论坛,直到我遇到这个问题,我才意识到类型 https://forums.aws.amazon.com/message.jspa?messageID=261061#262098

因此尝试了一些解决方法,以在使用bodyparser之前更改标头

app.use(function (req, res, next) {
        if (req.get('x-amz-sns-message-type')) {
        req.headers['content-type'] = 'application/json';
        }
        next();
      });
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb',
    extended: false
}));

所以现在req被解析为json。

答案 1 :(得分:0)

如果您使用的是 php,这应该可以工作

$res = file_get_contents('php://input');
file_put_contents('response.txt', $res. "\n", FILE_APPEND);