最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
C++ boost库spirit使用手册
时间:2022-06-25 04:48:53 编辑:袖梨 来源:一聚教程网
尝试通过cpp-netlib来做http服务器,但是这个库只能简单的解析http结构,像cookie等结构,都要自己解析,了解到spirit可以通过类似bnf范式格式定义字符串格式并解析。
boost本身有个类似的例子,解析的是通过分号或者&符号分割的键值对字符串,并放到对应的map中去。具体代码可以参照这里
http://www.b*o*o*st.org/doc/libs/1_55_0/libs/spirit/example/qi/key_value_sequence.cpp。所以基于这个代码,简单的进行修改之后,就能解析http cookie了。
首先,http cookie的格式,定义在rfc6265上。这里定义了服务器发送给浏览器的Set-Cookie头格式,和浏览器发给服务器的Cookie头的BNF范式。这里定义的太复杂,解析的时候没有考虑到这么多字符(特别是排除一些控制字符),大致的代码:
| 代码如下 | 复制代码 |
| namespace parser { namespace qi = boost::spirit::qi; typedef std::map<:string std::string> pairs_type; template struct cooke_sequence : qi::grammar qi::rule qi::rule qi::rule cooke_sequence() : cooke_sequence::base_type(query) { query = pair >> *(qi::lit(';') >> pair); pair = *qi::lit(' ') >> key >> *qi::lit(' ') >> -('=' >> *qi::lit(' ') >> value >> *qi::lit(' ')); key = qi::char_("a-zA-Z_%") >> *qi::char_("a-zA-Z_0-9%"); value = +(qi::char_ - ';'); } }; } |
|
这里简化了key和value,特别是value,只要是非分号的,都能解析到value中。使用也非常简单:
| 代码如下 | 复制代码 |
| namespace qi = boost::spirit::qi; parser::cooke_sequence<:string::const_iterator> p; parser::pairs_type value; if(qi::parse(c.begin(), c.end(), p, value)) { for(auto &entry : value) { cookies.insert(std::make_pair(entry.first, entry.second)); } } |
|
直接实例化cooe_sequence,将cookie字符串传入,就可以解析成map,然后再放入到自己的结构体中。这里直接抄了示例中的代码,所以直接使用了map,一般cookie没必要排序,可以直接使用unordered_map,通过hash表存放。
相关文章
- 女神漫画免费阅读在线观看最新版本下载安装-女神漫画全集高清完整版免费漫画入口页面 02-10
- 豆包网页版官方入口-豆包AI人工智能在线体验 02-10
- 成何体统电视剧32集全集:高清在线观看(免下载直达) 02-10
- 学科网登录入口-中小学学科网官网电脑版 02-10
- QQ网页版扫码登录入口-QQ网页版文件传输入口 02-10
- 一耽女孩免费漫画阅读软件下载安装手机版-一耽女孩正版免费下载安卓入口 02-10