我正在嘗試將Flask-RESTful的請求解析接口reqparse集成到我的後端,以便從客戶端請求HTTP頭。目前,我希望使用它來驗證用戶,並希望在HTTP標頭中傳遞'secret_key'
。爲什麼我無法使用add_argument()將HTTP Headers發送到Flask-RESTful reqparse模塊?
我用於此任務的功能是add_argument()
函數。我請求頭部代碼如下:
reqparse = reqparse.RequestParser()
reqparse.add_argument('secret_key', type=str, location='headers', required=True)
然而,在發送以下捲曲要求:
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')
意見。 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()
函數在頭參數中不佔用_
。但是,當我使用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
我不敢苟同。如果我使用'request.headers ['secret_key']'做出相同的請求,它就可以正常工作。例如:在post函數中,使用'data ['secret_key'] = request.headers ['secret_key']'。它的工作原理,但我希望使用此功能。但我會檢查你的解決方案。 –
您的解決方案有效,但我不喜歡這種推理,因爲我可以使用'request.headers ['secret_key']'發出請求。這是爲什麼? –
不用擔心,我在這裏找到了我的問題的答案:https://github.com/kennethreitz/requests/issues/1292 –