【问题标题】:Unable to get a response from http POST无法从 http POST 获得响应
【发布时间】:2013-01-03 23:55:49
【问题描述】:

我正在尝试使用 twilio 自动为我拨打几个电话,但我在让它正常工作时遇到了一些麻烦。我正在像这样使用 twilio 拨打电话:

conn.calls.create(
    to = event.student.phone_number,
    from_ = event.message.teacher.twilio_number,
    url = '%stwilio_calls/%d/' % (BASE_URL, event.id))

我相当肯定这部分代码可以正常工作,因为我收到了对我的手机的呼叫作为测试。但是,当我接到电话时,它告诉我有一个应用程序错误。在 Twilio 调试面板中,我看到了这个:

twilio 似乎没有从我的网站得到响应。奇怪的是,我可以导航到 URL (http://166.78.13.45:8000/twilio_calls/19/) 并接收看起来像正确格式化程序 twiml 的内容。不知道为什么 twilio 不能拿起它。创建此页面的视图如下所示:

@csrf_exempt
def twilio_call(request, event_id):
    event = Event.objects.get(pk=event_id)

    t = template.Template(event.message.text)
    c = template.Context({'student': event.student})
    call_text = t.render(c)

    # TODO if student not found ?
    # TODO if student.objects.call_notification_ind if false?

    r = twiml.Response()
    r.say(call_text)

    return HttpResponse(str(r))

我需要做什么才能让 twilio 阅读此页面?

【问题讨论】:

  • 调试器中具体的 XML 错误消息是什么?
  • 我遇到文档解析失败(错误 12100),并显示以下消息:文档第 1 行错误:文件过早结束。请确保响应正文是有效的 XML 文档。
  • 这意味着您的服务器正在向 Twilio 返回 XML,但格式不正确。

标签: python iptables twilio


【解决方案1】:

通过对 URL 的测试,如果您在 POST 正文中放入任何数据,响应正文似乎是空的。

$ curl -iXPOST http://166.78.13.45:8000/twilio_calls/19/
HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Fri, 04 Jan 2013 00:20:45 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive

<?xml version="1.0" encoding="UTF-8"?><Response><Say>Hi Dan,

This is a very long test message for you to try out.  Let's see what you think of it.  Give it a shot!!!

Call me back if you have any questions</Say></Response>

但是在请求中添加 CallSid 参数:

$ curl -iXPOST http://166.78.13.45:8000/twilio_calls/19/ -d 'foo'
HTTP/1.1 200 OK
Server: nginx/1.2.6
Date: Fri, 04 Jan 2013 00:20:58 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive

没有身体。

【讨论】:

  • 知道为什么会这样吗?
  • 否,但您应该检查您的代码中是否有任何 if/else/return 语句会根据调用 sid 分支控制流。或者在这里发布整个代码。
  • 刚刚重新格式化了原帖中views.py中的方法,这里是URLconf:url(r'^twilio_calls/(\d+)/$', 'teachercomapp.views.twilio_call', name='twilio_call'),
  • 看起来只是在请求正文中发布任何数据都会返回空响​​应。
  • 您可能想尝试打印行调试,例如从函数中的更高层返回,只是为了检查是否调用了正确的路由,并且它正在执行您期望的操作。
【解决方案2】:

这真的很奇怪,我仍然不确定是什么导致了我的问题,但我确实有一个解决方案。在我的views.py 文件中添加print request 行似乎可以解决这个问题以及我正在使用的另一个区域。我只能想象我在这里做错了什么,如果有人可以帮助我弄清楚为什么会这样以及将来如何避免它,我会很高兴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 2011-04-27
    • 1970-01-01
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多