我正在使用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包含两个元素"my“、"path”和m_query_components包含2对("key“、"xxx")、("yyy”、"zzz")。
我想要并期望的是v_path_components包含一个元素"my/path",m_query_components包含一个对("key","xxx&yyy=zzz")。
为了实现后者,relative_uri不应该对uri进行解码/编码,因为这会丢失信息。此外,应该在拆分结果上而不是在拆分之前执行web::uri::decode()。但是,由于REST本身以及它附带的许多示例都以上述方式使用,这使我相信我可能错了。
有人能证实我的发现或者解释我为什么走错路了吗?
发布于 2017-01-14 01:48:31
你的发现是有道理的。
由于您首先解码,然后编码的符号和(%3D)成为一个键/值对分隔符。路径组件也是如此。斜杠(%2f)成为路径分隔符,并被解析为路径分隔符。
https://stackoverflow.com/questions/36364375
复制相似问题