用于Python的Twilio RequestValidator始终返回false

时间:2013-09-12 05:14:46

标签: python google-app-engine twilio

我正在尝试将Twilio与Google App Engine结合使用。我目前正在尝试通过短信验证来自Twilio的请求。我有一个自定义处理程序,下面有2个方法。

from twilio.util import RequestValidator

class TwilioRequestHandler(BaseRequestHandler):
    def twilio_request_validator(self):
        return RequestValidator(AUTH_TOKEN)

    def validate_request(self):
        if not 'X-Twilio-Signature' in self.request.headers:
            logging.error("X-Twilio-Signature was not in the request headers")
            return False
        return self.twilio_request_validator().validate(self.request.url, self.request.POST, self.request.headers['X-Twilio-Signature'])

当我的某个TwiML端点发出请求时,我从请求处理程序中调用self.validate_request()。这似乎总是假的。从上面的代码中可以看出,这应该相当于调用Twilio的RequestValidator(AuthToken).validate(self.request.url, self.request.POST, self.request.headers['X-Twilio-Signature'])

我认为在计算签名时我可能不会包含我收到的一些请求参数,所以我甚至为一个请求获取参数,创建一个简单的脚本检查所有可能组合,并将其与该请求的签名进行比较。他们都没有成功,所以我必须好奇我做错了什么,或者这可能是Twilio方面的事情。

1 个答案:

答案 0 :(得分:1)

您是否针对Twilio端点检查了请求URL上的协议?

如果仅为HTTP配置Flask,Heroku显然会将HTTP流量代理到HTTP。即使Twilio指向以http://开头的网址,Flask的request.url仍会以https://开头。这将抛弃哈希值。