You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 15:15:07