如何在卡萨布兰卡优雅地解析URI

How to parse an URI elegantly in Casablanca

本文关键字:URI 卡萨布兰卡      更新时间:2023-10-16

如何在C++中优雅地解析请求(服务器端)的URI?

URI在卡萨布兰卡文档中定义为:

protocol://server[:port]/path?查询#碎片

比方说,我希望路径(包含所有元素)作为一个列表,查询作为键/值对的列表,这样

http://server/foo/bar?val1=1&val2=yo

会导致

std::list<string> path;
path.push_back("foo");
path.push_back("bar");
std::list<std::pair<string, string>> query;
query.push_back(std::make_pair("val1", "1"));
query.push_back(std::make_pair("val2", "yo"));

我想避免像其他地方建议的那样自己进行解析,主要是出于可移植性和性能的原因。

cpp-netlib似乎还不是boost的一部分,我不想引入新的库。

Casablanca有一个URI对象,但我找不到任何解析或迭代器。

有没有办法只使用boost、c++、casablanca/cpprestsdk来解决这个问题?

URI类中似乎存在静态帮助器函数,例如URI::split_query和URI::split_path,它们的执行完全符合请求。

我在看了这个使用的要点后发现了它们的参考文献

auto http_get_vars = uri::split_query(request.request_uri().query());