RustでHTTPのパスをパースして、パスとかクエリパラメータとかを取得する
#Rust #HTTP #parse #query_parameter
ちょっとタイトルが日本語的に、パスをパースというより、クエリパラメータを含んだURLをパースといった方がいいかもしれない。
やりたいこと
HTTPサーバーなどで取得できるクエリパラメータとかがついたパスをパースしたい。
コード
urlライブラリを使用する。
以下のコードは"/mypath?p1=23&p2=helloをパースして、パスとクエリパラメータに分けている。
code:rs
use url::Url;
fn main() {
// Create dummy root
let dummy_root = Url::parse("file://").unwrap();
// Parse uri
let uri = dummy_root.join("/mypath?p1=23&p2=hello").unwrap();
println!("{:?}", uri.path());
// => /mypath
for param in uri.query_pairs() {
println!("{:?}", param);
}
// => ("p1", "23")
// => ("p2", "hello")
}
Playground:
dummy_rootがないと、「相対パスなのでエラー」みたいな実行時エラーを出す。
code:出力
"/mypath"
("p1", "23")
("p2", "hello")
参考: Using hyper: how to get URL query string params? - help - The Rust Programming Language Forum