2

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 自体とそれに付属する多くのサンプルが上記の方法でこれを使用しているため、私が間違っているのではないかと思います。

誰かが私の発見を確認したり、私が間違った方向に進んでいる理由を説明したりできますか?

4

1 に答える 1

0

あなたの調査結果は理にかなっています。

最初にデコードしているため、エンコードされたアンパサンド (%3D) がキーと値のペアの区切り記号になります。パス コンポーネントについても同じです。スラッシュ (%2f) はパス区切り記号になり、そのように解析されます。

于 2017-01-14T01:48:31.717 に答える