6

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

URI 在Casablanca 文档中定义为:

协议://服务器[:端口]/路径?查询#片段

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

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 来解决这个问题?

4

1 回答 1

9

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

在查看了使用的这个要点后,我发现了对它们的引用

auto http_get_vars = uri::split_query(request.request_uri().query());
于 2015-11-19T14:50:31.657 回答