天天看點

boost spirit的簡單使用

嘗試通過cpp-netlib來做http伺服器,但是這個庫隻能簡單的解析http結構,像cookie等結構,都要自己解析,了解到spirit可以通過類似bnf範式格式定義字元串格式并解析。

boost本身有個類似的例子,解析的是通過分号或者&符号分割的鍵值對字元串,并放到對應的map中去。具體代碼可以參照這裡。是以基于這個代碼,簡單的進行修改之後,就能解析http cookie了。

首先,http cookie的格式,定義在rfc6265上。這裡定義了伺服器發送給浏覽器的set-cookie頭格式,和浏覽器發給伺服器的cookie頭的bnf範式。這裡定義的太複雜,解析的時候沒有考慮到這麼多字元(特别是排除一些控制字元),大緻的代碼:

這裡簡化了key和value,特别是value,隻要是非分号的,都能解析到value中。使用也非常簡單:

直接執行個體化cooe_sequence,将cookie字元串傳入,就可以解析成map,然後再放入到自己的結構體中。這裡直接抄了示例中的代碼,是以直接使用了map,一般cookie沒必要排序,可以直接使用unordered_map,通過hash表存放。

轉載自:https://coolex.info/blog/421.html

繼續閱讀