C ++ REST SDK中的URI编码(" Casablanca")

时间:2016-04-01 19:26:24

标签: c++ rest sdk casablanca

我正在使用C++ REST SDK 2.8的http监听器并注意到以下内容。如果我将以下URL发送给此侦听器:

http://my_server/my%2fpath?key=xxx%26yyy%3Dzzz

我做了:

auto uri = request.relative_uri();
auto v_path_components = web::uri::split_path(web::uri::decode(uri.path()));
auto m_query_components = web::uri::split_query(web::uri::decode(uri.query()));

然后我发现 v_path_components 包含2个元素["我的","路径"], m_query_components 包含2对[(" key"," xxx"),(" yyy"," zzz")]。

我想要和期望的是 v_path_components 包含1个元素[" my / path"], m_query_components 包含1对[strong> v_path_components ("键""&XXX放大器; YYY ZZZ =&#34)。]

为了让后者实现, relative_uri 不应该对uri进行解码/编码,因为这会丢失信息。此外, web :: uri :: decode()应该在拆分结果上执行,而不是在拆分之前执行。但是,由于REST SDK本身以及随附的许多示例都以上述方式使用它,这让我相信我可能错了。

任何人都可以确认我的发现或解释我为什么走错了路线吗?

1 个答案:

答案 0 :(得分:0)

你的发现很有意义。

由于您首先进行解码,因此编码的&符号(%3D)将成为键/值对分隔符。路径组件也是如此。斜杠(%2f)成为路径分隔符,并按原样解析。