Параметры адреса в Rust
После пути в адресе часто идут параметры: имя, знак равенства и значение, несколько пар разделяют амперсандом. Спецсимволы в значениях кодируют автоматически, если не склеивать хвост вручную.
Крейт принимает срез пар строк и сам собирает хвостовую часть после знака вопроса. Пары задают кортежами из двух строк; порядок в срезе может отличаться от итоговой строки, для сервера это обычно не важно.
Добавим к учебному хосту параметр поиска:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let url = "https://example.com/search";
match client
.get(url)
.query(&[("q", "rust"), ("page", "1")])
.send()
.await
{
Ok(resp) => {
println!("{}", resp.status().as_u16());
if let Err(e) = resp.text().await {
println!("{}", e);
}
}
Err(e) => println!("{}", e),
}
}
В итоговой строке адреса появятся закодированные пары. Хост может ответить кодом двести или другим числом; главное, что параметры ушли вместе с запросом.
Один ключ можно передать несколько раз, если повторить пару в срезе:
#[tokio::main]
async fn main() {
let client = reqwest::Client::new();
let url = "https://example.com/tags";
match client
.get(url)
.query(&[("tag", "news"), ("tag", "rust")])
.send()
.await
{
Ok(resp) => match resp.text().await {
Ok(body) => println!("{}", body.len()),
Err(e) => println!("{}", e),
},
Err(e) => println!("{}", e),
}
}
Дан адрес:
https://example.com/item
Допишите параметр id со значением
42 через срез пар, выполните
запрос и выведите числовой код ответа.
Дан фрагмент:
let pairs = [("lang", "ru")];
Скажите, куда в цепочке запроса подставить
pairs и появится ли знак вопроса
в адресе автоматически.
Дан адрес:
https://example.com/search
Передайте параметр q со значением
book, прочитайте тело ответа
и выведите его длину или текст ошибки.