我正在尝试将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方面的事情。
答案 0 :(得分:1)
您是否针对Twilio端点检查了请求URL上的协议?
如果仅为HTTP配置Flask,Heroku显然会将HTTP流量代理到HTTP。即使Twilio指向以http://
开头的网址,Flask的request.url仍会以https://
开头。这将抛弃哈希值。