👋

[備忘録08]作って学ぶブラウザのしくみ / URLの構文解析の実装/ URLの分割の実装/クエリパラメータを取得

2024/12/31に公開

http://example.com:8080/path/to/resource?query=string
上記のurlを例にクエリパラメータを取得する実装をする。
rustのplaygroundに以下を貼り付けて実行してみた方が理解早いと思います。

 pub fn type_of<T>(_: &T) -> &'static str {
     std::any::type_name::<T>()
 }
 
fn main() {

    println!("Hello, world!");

    let url_sample: String = "http://example.com:8080/path/to/resource?query=string".to_string();
    
    fn extract_path(hoge:String)-> String{
        let url_parts: Vec<&str> = hoge
            .trim_start_matches("http://")
            .splitn(2, "/")
            .collect();
        print!("{:?}\n", url_parts);

        if url_parts.len() < 2 {
            "/".to_string();
        }
        
        let path_and_serachpart: Vec<&str> = url_parts[1].splitn(2, "?").collect();
        if path_and_serachpart.len() < 2 {
            "".to_string()
        }else{
             print!("{:?}", path_and_serachpart[1].to_string());
            path_and_serachpart[1].to_string()
        }
        
    }
    
    print!("{}", extract_path(url_sample));
}

ちなみに出力は以下のようになります。

Hello, world!
["example.com:8080", "path/to/resource?query=string"]
"query=string"query=string

Discussion