英文:
parse query parameters from request in rust
问题
我第一次使用Rust,尝试解析HTTP请求中的查询参数。假设请求的URL是http://someUrl.com?param1=123&param2=345
,我试图捕获123和345。
英文:
I'm using rust for the first time and i'm trying to parse query parameters from a http request. Lets say the request url is http://someUrl.com?param1=123&param2=345
I'm trying to capture 123 and 345
答案1
得分: 3
如果你正在处理 Web 服务器的请求,你使用的 Web 服务器库肯定有自己的处理方式。
如果你只需要解析 URL 中的查询参数,你可以使用 url
库来实现:
use url::Url; // v2.3.1
fn main() {
let url = Url::try_from("http://someUrl.com?param1=123¶m2=345").unwrap();
for (key, val) in url.query_pairs() {
println!("{key} = {val}");
}
}
这里的变量都是字符串。
更可能的情况是,你希望将这些变量反序列化为方便的类型。你可以使用 serde
和 serde_qs
来实现:
use serde::Deserialize;
use url::Url;
#[derive(Deserialize, Debug)]
struct MyQuery {
param1: usize,
param2: i32,
}
fn main() {
let url = Url::try_from("http://someUrl.com?param1=123¶m2=345").unwrap();
if let Some(query) = url.query() {
let my_query: MyQuery = serde_qs::from_str(query).unwrap();
println!("{my_query:?}");
}
}
英文:
If you are handling a request in a web server, the web server crate that you are using will certainly have its own way to do this.
If you just need to parse query parameters from a URL, you can do that using url
:
use url::Url; // v2.3.1
fn main() {
let url = Url::try_from("http://someUrl.com?param1=123&param2=345").unwrap();
for (key, val) in url.query_pairs() {
println!("{key} = {val}");
}
}
Here the variables are all strings.
More likely, you'll want to deserialize the variables into convenient types. You can do that with serde
and serde_qs
:
use serde::Deserialize;
use url::Url;
#[derive(Deserialize, Debug)]
struct MyQuery {
param1: usize,
param2: i32,
}
fn main() {
let url = Url::try_from("http://someUrl.com?param1=123&param2=345").unwrap();
if let Some(query) = url.query() {
let my_query: MyQuery = serde_qs::from_str(query).unwrap();
println!("{my_query:?}");
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论