gpt4 book ai didi

python - 无法获取 HTTP 订阅确认请求

转载 作者:行者123 更新时间:2023-12-01 04:48:44 25 4
gpt4 key购买 nike

我编写了一个 Tornado 服务作为 Amazon SNS 终端节点。

class TestHandler(tornado.web.RequestHandler):
def get(self):
logging.info('get')
self.sns()
self.write(self.request.body.decode('utf-8'))

def post(self):
logging.info('post')
self.sns()
self.write(self.request.body.decode('utf-8'))

def sns(self):
headers = self.request.headers
logging.info('HEADER: {}'.format(headers))
arn = headers.get('x-amz-sns-subscription-arn')
obj = json.loads(self.request.body)

if headers.get('x-amz-sns-message-type') == 'SubscriptionConfirmation':
logging.info('REQUEST: {}'.format(self.request))
subscribe_url = obj[u'SubscribeURL']
logging.info('URL:{}'.format(subscribe_url))
return '<Arn %r>' % arn

elif headers.get('x-amz-sns-message-type') == 'UnsubscribeConfirmation':
logging.info('Unsubscription')

elif headers.get('x-amz-sns-message-type') == 'Notification':
logging.info('Unsubscription')

return '', 200

但是当我将端点订阅到 SNS 时,我没有收到任何 HTTP POST 请求。没有打印任何日志。所以我尝试做 curl ,日志显示它很好。我更确信 SNS 没有发送请求,而不是我的端点没有收到请求。我不知道如何继续。请帮忙。谢谢。

最佳答案

Right, the outside traffic might get blocked, but I can hit the endpoint (not EC2) from my local machine. 

这没有捕获重点。您必须先允许来自 Internet 的入站连接,SNS 才能访问您的 http(s) 端点。 SNS 没有通往您的实例的后门。

SNS 通知的源 IP 地址范围已发布,因此您可以在安全组中允许它们...

https://forums.aws.amazon.com/ann.jspa?annID=1649

但是,您需要注意该列表可能会发生变化,因此最佳实践可能是使您的端点可在全局范围内访问。

使用提供的签名验证消息,以及通过验证证书的 URL 是否与 SNS 合法关联以及通过使用以下命令获取证书来验证消息中证书的公钥也很重要: HTTPS 并验证 TLS 请求期间提供的证书是否合法属于 Amazon。

http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.verify.signature.html

关于python - 无法获取 HTTP 订阅确认请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28867214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com