【问题标题】:Django service on gunicorn POST request is recieved as GET?gunicorn POST 请求上的 Django 服务作为 GET 接收?
【发布时间】:2018-06-08 02:53:18
【问题描述】:

我有一个 Django 休息服务在 gunicorn 服务器上的虚拟环境中运行,带有以下 .wsgi 文件:

import os, sys import site

site.addsitedir('/opt/valuation/env/lib/python2.7/site-packages')


sys.stdout = sys.stderr
os.environ['DJANGO_SETTINGS_MODULE'] = 'valuation.valuationcont.valuation.settings'

import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

当我进行 curl POST 调用时,服务运行良好:

curl -H "Content-Type: application/json" -X POST -d '{...}' -u username:password http://localhost:8000/valuation/predict/

但是当我使用 axios 在 API 网关上执行相同的请求时,Django 服务会响应我的自定义 GET 响应(“不支持 GET,请尝试 POST”)。

axios({
    method: 'post',
    url:'http://localhost:8000/valuation/predict',
    headers:{
      "Content-Type":"application/json",
      "Authorization":"Basic [BASE64 ENCODING]"
    },
    data:{
      ...
    }
}).then(response=>{
  console.log(response.data)
}).catch(err=>{
  console.log(err.toString())
})

请求从 GET 转换为 POST。 这只发生在 django/gunicorn 服务中。

由于我是 django/gunicorn 的新手,我认为 .wsgi 文件有问题。但是 curl 调用是如何起作用的呢?

任何帮助表示赞赏,已经为此苦苦挣扎了一周。

编辑

设法在我的本地机器上重现了同样的问题。 axios 使用其 API 的 POST 请求被转换为 GET。

使用axios.post(...) 方法,我设法获得了 403 和 201。而 POSTMAN 工作正常。

我怀疑由于 POST 失败 axios API 有一个默认的 GET 回退,然后不会失败并且服务正常响应(“GET 不支持”应该如此)。

调试此问题的新步骤是询问,我如何在 javascript 中尽可能接近地重新创建 POSTMAN POST 调用,因为 POSTMAN 正在工作并且显然是 axios 导致了问题。

【问题讨论】:

  • 使用curl -v查看是否有重定向。
  • $ curl -v curl: 没有指定 URL! curl:尝试“curl --help”或“curl --manual”以获取更多信息
  • 对不起,我的错。从您问题中的高级卷曲线中,我暗示您知道如何使用它。实际上,您必须将参数 -v 添加到问题中的 curl 行中 URL 之前的适当位置。

标签: python node.js django gunicorn axios


【解决方案1】:

您没有使用相同的网址。在 curl sn-p 中,您请求 http://localhost:8000/valuation/predict/,但在第二个中您请求 http://localhost:8000/valuation/predict - 没有最后的斜线。

默认情况下,Django 会将不以斜杠结尾的 URL 重定向到以斜杠结尾的 URL,并且重定向始终是 GET。

【讨论】:

    猜你喜欢
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2015-09-25
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多