2016-04-01 10 views
2

私はC++ REST SDK 2.8のHTTPリスナーを使用しており、次のことに気付きました。私はこのリスナーに次のURLを送信する場合:C++ REST SDK( "Casablanca")のURIエンコーディング

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つの元素を含有させると、m_query_componentsが含まれている1組[( "キー"、 "XXX & YYY = ZZZ")] 。

relative_uriは、情報を失うので、uriをデコード/エンコードするべきではありません。さらに、web :: uri :: decode()は、分割前ではなく分割結果で実行する必要があります。しかし、REST SDK自体と同様に多くのサンプルがこの方法で使用されているので、間違いかもしれないと私は信じています。

私の所見を確認したり、私が間違っている理由を説明できる人はいませんか?

答えて

0

あなたの発見は意味があります。

最初にデコードするので、エンコードされたアンパサンド(%3D)はキーと値のペアのセパレータになります。パスコンポーネントと同じです。スラッシュ(%2f)はパス区切り文字になり、そのまま解析されます。

関連する問題