2017-12-27 4 views
0

Ich habe einen Service Django Restes auf virutal Umgebung auf gunicorn Server mit der folgenden .wsgi Datei ausgeführt wird:Django-Service auf Gunicorn POST-Anfrage wird als GET erhalten?

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() 

Wenn ich den Dienst curl POST aufrufe perfekt funktioniere:

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

Aber als ich Führe die gleiche Anfrage auf dem API-Gateway unter Verwendung von Axios aus, der Django-Dienst antwortet auf meine benutzerdefinierte GET-Antwort ("GET wird nicht unterstützt, versuche 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()) 
}) 

Die Anfrage wird von GET nach POST umgewandelt. Dies geschieht nur mit dem Django/Gunicorn Service.

Da ich neu bei Django/Gunicorn bin denke ich, dass etwas mit der .wsgi-Datei nicht stimmt. Aber wie funktioniert der Curl Call?

Jede Hilfe geschätzt, kämpfte seit einer Woche mit diesem.

bearbeitet:

Managed das gleiche Problem in meinem lokalen Rechner neu zu erstellen. Axios-POST-Anfragen, die ihre API verwenden, werden in GET übersetzt.

Mit der axios.post(...) Methode gelang es mir, 403 und 201 zu bekommen. Alles während POSTMAN funktioniert gut.

Ich habe den Verdacht, dass seit dem POST fehlschlägt Axios API hat eine Standard-Fallback auf GET, die dann nicht fehlschlägt und Service reagiert normal ("GET nicht unterstützt" wie es sein sollte).

Neuer Schritt zum Debuggen wäre zu fragen, wie ich POSTMAN POST Aufruf so genau wie möglich in Javascript neu erstellen, da POSTMAN funktioniert und es ist offensichtlich Axios, dass die Probleme verursacht.

+0

Verwenden Sie 'curl -v', um zu sehen, ob es eine Umleitung gibt. –

+0

$ curl -v curl: keine URL angegeben! curl: versuche 'curl --help' oder 'curl --manual' für weitere Informationen – KasparTr

+0

Sorry, mein Schlechter. Von der fortgeschrittenen Curl-Linie in Ihrer Frage habe ich angedeutet, dass Sie wissen, wie man es benutzt. Sie müssen das Argument "-v" an der richtigen Position vor der URL zu der Curl-Zeile in Ihrer Frage hinzufügen. –

Antwort