我正在尝试将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 –