flask-restful框架下Resource类如何获取请求携带的cookies与headers
解决方案
flask-restful 完全兼容 Flask 原生的 request 对象,不需要使用框架专属的特殊方法,直接导入调用即可获取请求的 headers 和 cookies。
具体实现步骤
- 第一步:在文件头部导入 Flask 原生请求对象
from flask import request - 第二步:在 get/post 方法内直接调用
request对象的对应属性即可:- 获取所有请求头:
request.headers(类字典结构,可直接通过key取值,也可遍历) - 获取指定请求头:
request.headers.get('你的请求头字段名') - 获取所有Cookies:
request.cookies(类字典结构) - 获取指定Cookie:
request.cookies.get('你的Cookie名称')
- 获取所有请求头:
代码示例(修改后的TestAPI类)
from flask import request from flask_restful import Resource, reqparse import logging logger = logging.getLogger(__name__) class TestAPI(Resource): def __init__(self, **kwargs): self.__main_loop = kwargs['main_loop'] self.reqparse = reqparse.RequestParser() self.reqparse.add_argument('testKey', type=str, required=True, help='No textKey provided', location='json') super(TestAPI, self).__init__() def get(self): try: logger.info("Test get") # 示例:获取请求头 content_type = request.headers.get('Content-Type') logger.info(f"Content-Type请求头: {content_type}") # 示例:遍历所有请求头 for k, v in request.headers.items(): logger.info(f"请求头 {k}: {v}") # 示例:获取Cookie user_id = request.cookies.get('user_id') logger.info(f"user_id Cookie值: {user_id}") # 示例:遍历所有Cookie for k, v in request.cookies.items(): logger.info(f"Cookie {k}: {v}") return {"testAnswer": "Test Value", "contentType": content_type, "userIdCookie": user_id} except Exception as e: logger.error(e) return str(e), 500 def post(self): try: logger.info("Test post") # post方法里也可以同样调用request对象 user_agent = request.headers.get('User-Agent') session_id = request.cookies.get('session_id') logger.info(f"User-Agent: {user_agent}, session_id Cookie: {session_id}") args = self.reqparse.parse_args() logger.info("Items: " + str(args.items())) return args except Exception as e: logger.error(e) return str(e), 500
补充用法
reqparse的add_argument方法支持指定location参数为headers或者cookies,可以直接把指定的请求头、Cookie字段当成参数校验解析,适合需要强制校验字段是否存在的场景:
# 示例:用reqparse直接校验解析请求头和Cookie字段 self.reqparse.add_argument('X-User-Role', type=str, required=True, help='缺少X-User-Role请求头', location='headers') self.reqparse.add_argument('session_id', type=str, required=True, help='缺少session_id Cookie', location='cookies')
解析完成后直接从args对象中取值即可,和解析JSON参数的用法完全一致。
内容的提问来源于stack exchange,提问作者erIsCoding
相关产品推荐
相关产品推荐

