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

时间:2015-11-19 13:22:50

标签: c++ visual-studio rest boost casablanca

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

URI在Casablanca Documentation中定义为:

  

protocol:// server [:port] / path? query#fragment

让我们说,我希望路径(包含所有元素)作为列表,将查询作为键/值对的列表,所以

  

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"));

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

cpp-netlib似乎不是part of boost,我宁愿不介绍新的图书馆。

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

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

1 个答案:

答案 0 :(得分:7)

似乎URI类中有静态辅助函数,例如完全按照要求执行的uri::split_queryuri::split_path

在查看使用

this gist后,我找到了对它们的引用
auto http_get_vars = uri::split_query(request.request_uri().query());