嘗試通過cpp-netlib來做http伺服器,但是這個庫只能簡單的解析http結構,像cookie等結構,都要自己解析,了解到spirit可以通過類似bnf正規化格式定義字串格式並解析。
boost本身有個類似的例子,解析的是通過分號或者&符號分割的鍵值對字串,並放到對應的map中去。具體**可以參照這裡。所以基於這個**,簡單的進行修改之後,就能解析http cookie了。
首先,http cookie的格式,定義在rfc6265上。這裡定義了伺服器傳送給瀏覽器的set-cookie頭格式,和瀏覽器發給伺服器的cookie頭的bnf正規化。這裡定義的太複雜,解析的時候沒有考慮到這麼多字元(特別是排除一些控制字元),大致的**:
[cce lang=」cpp」]
namespace parser};}
[/cce]
這裡簡化了key和value,特別是value,只要是非分號的,都能解析到value中。使用也非常簡單:
[cce lang=」cpp」]
namespace qi = boost::spirit::qi;
parser::cooke_sequencep;
parser::pairs_type value;
if(qi::parse(c.begin(), c.end(), p, value))
}[/cce]
直接例項化cooe_sequence,將cookie字串傳入,就可以解析成map,然後再放入到自己的結構體中。這裡直接抄了示例中的**,所以直接使用了map,一般cookie沒必要排序,可以直接使用unordered_map,通過hash表存放。
boost spirit 的一些記錄
最近的工作跟 boost spirit 多一些,本來想整理乙個較為系統的筆記,不過感覺目前思路還比較凌亂,先隨便記錄一些。spirit 是 boost 中的乙個 ll解析器框架,他完成實現乙個 ebnf 語法解析器的功能,但它的輸入為c 語言。ll parser framework represen...
UICollectionView的簡單使用
所屬controller要遵循三個協議 uicollectionviewdatasource,uicollectionviewdelegate,uicollectionviewdelegateflowlayout uicollectionviewflowlayout flowlayout uicol...
BGAQRCode Android的簡單使用
compile com.google.zxing core 3.2.1 xmlns android 這句是使用選擇器框架時用到的 xmlns tools package com.huaqiang.zxingdemo 選擇框架用到 android name android.permission.cam...