[英]Django service on gunicorn POST request is recieved as GET?
我在帶有以下.wsgi文件的gunicorn服務器上的虛擬環境上運行的Django rest服務:
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調用又如何工作呢?
任何幫助表示贊賞,已經為此努力了一個星期。
編輯 :
設法在本地計算機上重新創建相同的問題。 使用其API的axios POST請求被轉換為GET。
使用axios.post(...)
方法,我成功獲取了403和201。
我懷疑由於POST失敗,因此axios API具有默認的回退到GET的后備功能,然后它不會失敗並且服務可以正常響應(應為“不支持GET”)。
調試此問題的新步驟將是詢問,由於POSTMAN正在工作,並且很明顯是axios引起了問題,因此如何在JavaScript中盡可能近地重新創建POSTMAN POST調用。
您沒有使用相同的URL。 在curl片段中,您請求http:// localhost:8000 / valuation / predict /,但在第二個片段中,您請求http:// localhost:8000 / valuation / predict-不帶最后斜杠。
默認情況下,Django會將不以斜杠結尾的URL重定向到一個以斜杠結尾的URL,並且重定向始終是GET。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.