【问题标题】:How to parse an URI elegantly in Casablanca如何在卡萨布兰卡优雅地解析 URI
【发布时间】:2016-02-21 16:06:51
【问题描述】:

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

URI 在Casablanca Documentation 中定义为:

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    我在查看 this gist 后发现了对它们的引用

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

    【讨论】: