簡體   English   中英

為什么我無法使用add_argument()將HTTP標頭發送到Flask-RESTful reqparse模塊?

[英]Why am I unable to send HTTP Headers to Flask-RESTful reqparse module using add_argument()?

我正在嘗試集成Flask-RESTful的請求解析接口,在我的后端reqparse來請求來自客戶端的HTTP頭。 目前,我希望使用它來驗證用戶並希望在HTTP標頭中傳遞'secret_key'

我用於此任務的函數是add_argument()函數。 我請求標題的代碼如下:

reqparse = reqparse.RequestParser()
reqparse.add_argument('secret_key', type=str, location='headers', required=True)

但是,在發送以下cURL請求時:

curl -H "Content-Type: application/json" -H "{secret_key: SECRET}" -X POST -d '{}' http://localhost:5000/authUser

我在Pycharm社區版編輯器上收到以下400錯誤:

127.0.0.1 - - [02/Aug/2016 18:48:59] "POST /authUser HTTP/1.1" 400 -

以及我的cURL終端上的以下消息:

{
  "message": {
    "secret_key": "Missing required parameter in the HTTP headers"
  }
}

要在Pycharm上重現此錯誤(並希望所有其他編譯器也是如此),請使用下面編寫的文件,如下所示:

Folder - Sample_App
    - __init__.py
    - run.py
    - views.py

__init__.py

from flask import Flask
from flask_restful import Api
from views import AuthUser

app = Flask(__name__)

api = Api(app)
api.add_resource(AuthUser, '/authUser')

views.py

from flask_restful import reqparse, Resource

class AuthUser(Resource):

    def __init__(self):
        self.reqparse = reqparse.RequestParser()
        self.reqparse.add_argument('secret_key', type=str, location='headers', required=True)

    def post(self):
        data = self.reqparse.parse_args()
        if data['secret_key'] == "SECRET":
            print("Success")
            return 200
        return 400

run.py

from __init__ import app

app.run(host='0.0.0.0', port=5000, debug=True)

你能告訴我如何解決這個問題嗎? 我想知道是否需要更改location參數或者我的cURL請求中是否有錯誤。

編輯:

在Methika的回應的幫助下,我發現了錯誤。 add_argument()函數不在headers參數中使用_ 但是,當我使用requests.headers['secret_key']函數時,我可以請求帶有_字符的標題。 為什么會這樣?

新的views.py代碼:

views.py

from flask_restful import reqparse, Resource

class AuthUser(Resource):

    def __init__(self):
        self.reqparse = reqparse.RequestParser()

    def post(self):
        data = self.reqparse.parse_args()
        data['secret_key'] = request.headers['secret_key']
        if data['secret_key'] == "SECRET":
            print("Success")
            return 200
        return 400

我用你在這里給出的代碼做了一些測試,我發現問題不是來自你的代碼,而是來自變量的名稱:

如果更換secret_key通過secretkey (或別的東西,沒有下划線),它的工作!

我發現這個帖子 ,燒瓶似乎不接受標題變量名稱中的下划線。

而不是這個卷曲請求

curl -H "Content-Type: application/json" -H "{secret_key: SECRET}" -X POST -d '{}' http://localhost:5000/authUser

試試這個吧

curl -H "Content-Type: application/json" -H "secret_key: SECRET" -X     POST -d '{}' http://localhost:5000/authUser

在標題中我通常看到使用像“Key:Value”這樣的值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM