function parse_cookie
将Cookie字符串解析成Json对象
key1=value1; key2=value2; key3=value3; key4=value4
|
v
{
"key1": "value1",
"key2": "value2",
"key3": "value3",
"key4": "value4",
}
Struct Cookie
/**
* @brief 代表一条Cookie
* */
struct Cookie {
/**
* @brief 域名
* */
std::string domain;
/**
* @brief 路径
* */
std::string path = "/"; /*for each site use '/' as default path*/
/**
* @brief 键
* */
std::string key;
/**
* @brief 值
* */
std::string value;
};
Class qqmusic::utils::CookieJar
ClassList > qqmusic > utils > CookieJar
简易Cookie管理器, 负责cookie的序列化和反序列化, 依赖 nlohmann::json
实现 目前不支持路径嵌套和Expires
和HttpOnly
这样的特性More...
#include <cookie.h>
Public Functions
Type | Name |
---|---|
CookieJar () 空初始化 |
|
CookieJar (std::string_view cache) 缓存反序列化, 从 dump 函数产生的缓存构造 |
|
CookieJar (std::string_view cookie_str, std::string_view domain, std::string_view path="/") 从原始cookie字符串解析 |
|
qqmusic::Result< void > | clear (std::optional< std::string > domain=std::nullopt, std::optional< std::string > path=std::nullopt, std::optional< std::string > key=std::nullopt) 删除对应区域的cookie |
qqmusic::Result< void > | del (std::string_view key, std::optional< std::string > domain=std::nullopt, std::optional< std::string > path=std::nullopt) 删除对应键的Cookie字段和他的值 |
qqmusic::Result< std::string > | dump () 序列化Cookie |
qqmusic::Result< std::string > | get (std::string_view key, std::optional< std::string > domain=std::nullopt, std::optional< std::string > path=std::nullopt) 查询对应键的Cookie字段的值 |
qqmusic::Result< void > | merge (const CookieJar & cookies) 合并CookieJar内容 |
qqmusic::Result< std::string > | serialize (std::string_view domain, std::string_view path="/") 将对应域名和路径的Cookie序列化成请求报文 |
qqmusic::Result< void > | set (const Cookie & cookie) 插入一条Cookie |
qqmusic::Result< void > | update (const CookieJar & cookies) 替换CookieJar的内容 |
Detailed Description
使用Json数据结构来储存Cookie
{
"domain1" : {
"path1": {
"key1": "value1",
"key2": "value2"
},
"path2": {
"key1": "value1",
"key2": "value2"
}
},
"domain2" : {
"path1": {
"key1": "value1",
"key2": "value2"
},
"path2": {
"key1": "value1",
"key2": "value2"
}
}
}
Warning:
不支持path的嵌套, example.com/menu
和 example.com/menu/usr
被认为是域名example.com
下两个完全不同的路径.
不支持解析HttpOnly
, Expires
这样的字段, 不是键值对形式的 Cookie条目会被丢弃.
待办事项
需要支持嵌套的路径, 支持非键值对形式的Cookie
Public Functions Documentation
function CookieJar [1/3]
空初始化
function CookieJar [2/3]
缓存反序列化, 从 dump
函数产生的缓存构造
Parameters:
cache
缓存
function CookieJar [3/3]
从原始cookie字符串解析
qqmusic::utils::CookieJar::CookieJar (
std::string_view cookie_str,
std::string_view domain,
std::string_view path="/"
)
Parameters:
cookie_str
请求报文中cookie字符串, 一般存在于Set-Cookie
字段domain
域名path
路径, 默认是/
function clear
删除对应区域的cookie
qqmusic::Result< void > qqmusic::utils::CookieJar::clear (
std::optional< std::string > domain=std::nullopt,
std::optional< std::string > path=std::nullopt,
std::optional< std::string > key=std::nullopt
)
function del
删除对应键的Cookie字段和他的值
qqmusic::Result< void > qqmusic::utils::CookieJar::del (
std::string_view key,
std::optional< std::string > domain=std::nullopt,
std::optional< std::string > path=std::nullopt
)
Parameters:
key
键domain
域名, 默认std::nullopt
, 若不给出则全局寻找path
路径, 默认std::nullopt
, 若不给出则在域名下寻找
Returns:
Result <void>
, 如果没有对应的键, 会返回JsonError
Note:
缺省参数时总是删除第一个找到符合的键值对
function dump
序列化Cookie
Returns:
已经序列化的json字符串, 如果出错会返回JsonError
function get
查询对应键的Cookie字段的值
qqmusic::Result< std::string > qqmusic::utils::CookieJar::get (
std::string_view key,
std::optional< std::string > domain=std::nullopt,
std::optional< std::string > path=std::nullopt
)
Parameters:
key
键domain
域名, 默认std::nullopt
, 若不给出则全局寻找path
路径, 默认std::nullopt
, 若不给出则在域名下寻找
Returns:
Result <std::string>
, 键值对的值是字符串形式的 找不到会返回JsonError
Note:
参数缺省时总是返回第一个找到的键值对的值
function merge
合并CookieJar内容
Parameters:
cookies
待合并cookie
Note:
原本Cookie不存在的字段被创建, 重合的字段被新值覆盖
function serialize
将对应域名和路径的Cookie序列化成请求报文
qqmusic::Result< std::string > qqmusic::utils::CookieJar::serialize (
std::string_view domain,
std::string_view path="/"
)
Parameters:
domain
域名path
路径, 默认/
function set
插入一条Cookie
Parameters:
cookie
一个Cookie条目
Note:
如果对应域名和路径的这个Cookie的键已经存在, 那么会覆盖老的值
function update
替换CookieJar的内容
Parameters:
cookies
新的Cookies
The documentation for this class was generated from the following file include/qqmusic/utils/cookie.h