[英]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.