2017-12-27 21 views
0

私はDjangoは以下の.wsgiファイルでgunicornサーバー上Virutalの環境で実行しているサービスを休ま持っている:私は、サービスが完璧に動作カールPOST呼び出しを行うとGANETOR POSTリクエストのDjangoサービスはGETとして受け取りますか?

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 -H "Content-Type: application/json" -X POST -d '{...}' -u username:password http://localhost:8000/valuation/predict/ 

しかし、私Axisを使用して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ファイルに問題があると思います。しかし、どのようにカールコールが働くのでしょうか?

何か助けていただきありがとうございました。今一週間これで苦労しています。

編集:私のローカルマシンで同じ問題を再現するために管理

。 APIを使用するAxios POSTリクエストはGETに変換されます。

axios.post(...)メソッドを使用すると、私は403と201を得ることができました。すべてPOSTMANがうまく動作します。

私は、POSTに失敗したAxios APIにはGETに対するデフォルトのフォールバックがあり、それが失敗せず、サービスが正常に応答する(「GETはサポートされていない」必要がある)という疑いがあります。

これをデバッグするための新しいステップは、POSTMANが動作しているので、どうやってPOSTMAN POSTコールをJavaScriptのできるだけ近くに再作成するのかということです。問題を引き起こしているのは明らかです。

+0

「curl -v」を使用して、リダイレクトがあるかどうかを確認します。 –

+0

$ curl -v curl:URLが指定されていません! curl:詳細については、 'curl --help'または 'curl --manual'を試してください。 – KasparTr

+0

申し訳ありませんが、私の悪いです。あなたの質問の先進的なカールラインから、私はあなたがそれをどのように使用するかを知っていることを暗示しています。実際には、あなたの質問のカール行に '-v'引数をURLの前に適切な位置に追加する必要があります。 –

答えて

2

あなたは同じURLを使用していません。カールスニペットではhttp://localhost:8000/valuation/predict/をリクエストしますが、2番目にはhttp://localhost:8000/valuation/predictを要求します。最後のスラッシュは使用しません。

デフォルトでDjangoはスラッシュで終わらないURLをリダイレクトします。リダイレクトは常にGETです。

関連する問題