我正在尝试一些我认为非常简单的事情,当我用 postman 测试我的终点时它工作正常,但是当网站启动时,就是我得到“错误”的时候
这些是我当前的设置:
twilio==6.29.1
Django==2.0.7
djangorestframework==3.9.4
Python 3.6.8
使用 twilio 发送短信后:
client = Client(key1,key2)
message = client.api.account.messages.create(
body= request.data["Body"],
to= request.data["toNumber"],
status_callback='https://myurl',
from_= request.data["fromNumber"]
)
我已经设置了回拨
class SMSCallBack(APIView):
parser_classes = (JSONParser,)
def post(self, request, format=None):
print(request.GET)
print(request.GET.getlist('SmsSid'))
return Response({'xxx': 'xxx'})
然而这是我在日志中的回应
<QueryDict: {}>
[]
如果我尝试在 postman 中做同样的事情,我会得到
<QueryDict: {'SmsSid': ['asd']}>
['asd']
现在我和 postman 一起猜测我已经正确设置它(POST,并在参数选项卡中添加一个值),因为来自 twilio 的控制台日志表明他们发送的多个参数之一是 SmsSid
我是 Django 和 python 的新手,所以在尝试获取传入参数时,我是否遗漏了什么?
当我尝试
request.POST.getlist('SmsSid')
我的结果是:
2019-07-15T05:15:25.735240+00:00 app[web.1]: 10.65.77.132 - - [15/Jul/2019:05:15:25 +0000] "POST /XXXX/smscallback/ HTTP/1.1" 415 100 "-" "TwilioProxy/1.1"
2019-07-15T05:15:25.738919+00:00 heroku[router]: at=info method=POST path="/XXXX/smscallback/" host=XXX.com request_id=3c5b81c2-003b-461a-8bd9-3e79d4545a9a fwd="3.94.8.12" dyno=web.1 connect=1ms service=783ms status=415 bytes=346 protocol=https
当我在 postman 中尝试时,我得到了
[]
最佳答案
此处为 Twilio 开发人员布道师。
Twilio 将向您的 statusCallback 端点发出 POST 请求。所以数据将在请求正文中,在 request.POST
下,而不是在 request.GET
下。
您的代码还表明您正在使用 JSONParser
来解析传入的请求。 Twilio 将请求作为 application/x-www-form-urlencoded
发送,因此您应该改用 FormParser
。
让我知道这是否有帮助。
关于python - Django + Rest 框架 + twilio : Getitng status call back sid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033513/