【问题标题】:URI encoding in C++ REST SDK ("Casablanca")C++ REST SDK(“卡萨布兰卡”)中的 URI 编码
【发布时间】:2016-04-01 19:26:23
【问题描述】:

我正在使用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 个元素 ["my", "path"],而 m_query_components 包含 2 对 [("key","xxx") , ("yyy","zzz")].

我想要并且期望的是 v_path_components 包含 1 个元素 ["my/path"],m_query_components 包含 1 对 [("key", "xxx&yyy=zzz")]。

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

谁能证实我的发现或解释为什么我走错了路?

【问题讨论】:

    标签: c++ rest sdk casablanca


    【解决方案1】:

    你的发现很有意义。

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

    【讨论】:

      最近更新 更多